有没有办法重命名 laravel 集合结果中的数据键?目前这个
DB::table('contracts AS C')->paginate(1)
返回
{
"current_page": 1,
"data": [
{
"id": 191,
"buyer": "John",
"provider": "Jane"
}
],
"from": 1,
"last_page": 1,
"next_page_url": "",
"path": "",
"per_page": 1,
"prev_page_url": null,
"to": 1,
"total": 1
}
我想要的是这个
{
"current_page": 1,
"parties": [
{
"id": 191,
"buyer": "John",
"provider": "Jane"
}
],
"from": 1,
"last_page": 1,
"next_page_url": "",
"path": "",
"per_page": 1,
"prev_page_url": null,
"to": 1,
"total": 1
}
这里的挑战是改变各方的数据关键
您可以使用keyBy()
收集方法。
$unfiltered = DB::table('contracts AS C')->paginate(1);
$filtered = $unfiltered->keyBy(function ($value, $key) {
if ($key == 'data') {
return 'parties';
} else {
return $key;
}
});
return $filtered;
您可以将集合转换为数组并对其进行操作:
$result = DB::table('contracts AS C')->paginate(1)->toArray();
$data = $result['data'];
unset($result['data']);
$result['parties'] = $data;
return $result;
这也不需要任何额外的循环。
仅在调用分页对象toArray()
时设置data
键。在此之前,它是一个带有密钥items
的集合。
快速而肮脏的解决方案是在 Paginator 对象上调用toArray()
并在json_encode()
之前更改数组的键名。
另一种解决方案是扩展 Builder 类,就像在这里所做的那样,覆盖paginate()
方法和 Paginator 的toArray()
方法。
您可以使用以下代码返回数据:
$coins = CoinResource::collection(Cryptocurrency::all());
return ['your_custom_name' => $coins];