我可以在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
}
将数据密钥更改为各方的挑战
答案 0 :(得分:2)
您可以使用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;
答案 1 :(得分:0)
仅在调用Paginator对象data
时设置toArray()
键。在此之前,它是一个带有密钥items
的集合。
快速而肮脏的解决方案是在Paginator对象上调用toArray()
并在json_encode()
之前更改数组的键名。
另一个解决方案是扩展Builder类,就像it's done here一样,覆盖paginate()
方法和Paginator的toArray()
方法。
答案 2 :(得分:0)
您可以将集合转换为数组并对其进行操作:
$result = DB::table('contracts AS C')->paginate(1)->toArray();
$data = $result['data'];
unset($result['data']);
$result['parties'] = $data;
return $result;
这也不需要任何额外的循环。