我正在编写一个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,
));
我怎样才能让Laravel给我一个合适的阵列?
答案 0 :(得分:3)
当您第一次收到活动时,Collection
看起来像这样:
[
0 => Event1,
1 => Event2,
2 => Event3
]
这是一个正确索引的数值数组,可以用JSON表示为数组。但是,一旦您获得Collection
,就会在其上调用sortBy()
,对Collection
中的项目进行排序。此排序重新排列数组内的项和键的值。此时,您的Collection
可能类似于:
[
1 => Event2,
0 => Event1,
2 => Event3
]
这不是正确索引的数值数组,不能在JSON中表示为数组。这个数组必须表示为一个对象,这就是你所看到的。
为了获得您期望的结果,您需要在排序后重新键入Collection
中的项目。您可以使用values()
上的Collection
方法执行此操作(只需在内部项目数组上调用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);