php – Laravel Eloquent toArray不使用方括号

前端之家收集整理的这篇文章主要介绍了php – Laravel Eloquent toArray不使用方括号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在写一个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);

猜你在找的Laravel相关文章