将拉拉维尔集合重命名"data"键



有没有办法重命名 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];

最新更新