Laravel Eloquent toArray 不使用方括号
Posted
技术标签:
【中文标题】Laravel Eloquent toArray 不使用方括号【英文标题】:Laravel Eloquent toArray not using square braces 【发布时间】:2016-07-13 20:48:21 【问题描述】:我正在编写一个 api 并尝试将一些结果转换为 JSON。当雄辩的结果转换为数组时,我期待这样的事情:
[
"id": "0", ...
,
"id": "", ...
,
]
但是,Laravel 使用 table 键将其显示为键值列表:
"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 给我一个合适的数组?
【问题讨论】:
【参考方案1】:当您第一次收到您的事件时,您的 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);
【讨论】:
以上是关于Laravel Eloquent toArray 不使用方括号的主要内容,如果未能解决你的问题,请参考以下文章
Laravel,获得类似 Eloquent 使用查询生成器的结果