我正在编写一个 api 并尝试将许多结果转换为 JSON。当雄辩的结果转换为数组时,我期待这样的东西:
[
{
"id": "0", ...
},
{
"id": "", ...
},
]
但相反,Laravel使用表键将其显示为键,值列表:
"0":{
{
"id": "0", ...
}
},
"1":{
{
"id": "1", ...
}
}
这是函数:
$results = 'App'Event::with('sandboxes')->get()->sortBy('start_time')->forPage($pageNum,$perPage);
return response()->json(array(
"events" => $page,
));
我怎样才能让拉拉维尔给我一个合适的数组?
首次获取事件时,Collection
如下所示:
[
0 => Event1,
1 => Event2,
2 => Event3
]
这是一个正确索引的数字数组,可以在 JSON 中表示为数组。但是,一旦你得到你的Collection
,你调用sortBy()
,它会对Collection
中的项目进行排序。此排序会重新排列数组中项的键和值。此时,您的Collection
可能如下所示:
[
1 => Event2,
0 => Event1,
2 => Event3
]
这不是一个正确索引的数字数组,不能在 JSON 中表示为数组。此数组必须表示为一个对象,这就是您所看到的。
为了获得预期的结果,您需要在排序后重新键入Collection
中的项目。您可以使用Collection
上的 values()
方法执行此操作(该方法仅在内部 items 数组上调用 array_values()
(。
重新键入收藏集后,它将如下所示:
[
0 => Event2,
1 => Event1,
2 => Event3
]
现在,这是一个正确索引的数字数组,可以用 JSON 表示为数组。
因此,您的代码应如下所示:
$results = 'App'Event::with('sandboxes')
->get()
->sortBy('start_time')
->values() // re-key the items in the collection after sorting
->forPage($pageNum, $perPage);