gpt4 book ai didi

php - Laravel Eloquent toArray 不使用方括号

转载 作者:可可西里 更新时间:2023-10-31 23:17:28 25 4
gpt4 key购买 nike

我正在编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com