我正在编写一个 api 并尝试将一些结果转换为 JSON。当 Eloquent 结果转换为数组时,我期待这样的事情:
[
{
"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 给我一个合适的数组?
最佳答案
当您第一次获取事件时,您的Collection
看起来像这样:
[
0 => Event1,
1 => Event2,
2 => Event3
]
这是一个正确索引的数字数组,可以表示为 JSON 中的数组。但是,一旦您获得了 Collection
,就可以对其调用 sortBy()
,它会对 Collection
中的项目进行排序。这种排序会重新排列数组中项的键和值。此时,您的 Collection
可能类似于:
[
1 => Event2,
0 => Event1,
2 => Event3
]
这不是一个正确索引的数值数组,不能用 JSON 数组表示。该数组必须表示为一个对象,这就是您所看到的。
为了获得您期望的结果,您需要在排序后重新键入 Collection
中的项目。您可以使用 Collection
上的 values()
方法执行此操作(它仅调用内部项数组上的 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);
关于php - Laravel Eloquent toArray 不使用方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36231077/