我正在写一个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 => Event1,1 => Event2,2 => Event3 ]
这是一个正确索引的数值数组,可以用JSON表示为数组.但是,一旦获得了Collection,就可以在其上调用sortBy(),对Collection中的项进行排序.此排序重新排列数组内的项和键的值.此时,您的收藏可能看起来像:
[ 1 => Event2,0 => Event1,2 => Event3 ]
这不是正确索引的数字数组,不能在JSON中表示为数组.此数组必须表示为对象,这是您所看到的.
为了获得您期望的结果,您需要在对其进行排序后重新键入集合中的项目.您可以使用Collection上的values()方法执行此操作(它只调用内部项数组上的array_values()).
一旦你重新修改了你的Collection,它将看起来像:
[ 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);