Laravel Eloquent toArray 不使用方括号


Laravel Eloquent toArray not using square braces

我正在编写一个 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,
    ));

我怎样才能让拉拉维尔给我一个合适的数组?

首次获取事件时,Collection如下所示:

[
    0 => Event1,
    1 => Event2,
    2 => Event3
]

这是一个正确索引的数字数组,可以在 JSON 中表示为数组。但是,一旦你得到你的Collection,你调用sortBy(),它会对Collection中的项目进行排序。此排序会重新排列数组中项的键和值。此时,您的Collection可能如下所示:

[
    1 => Event2,
    0 => Event1,
    2 => Event3
]

这不是一个正确索引的数字数组,不能在 JSON 中表示为数组。此数组必须表示为一个对象,这就是您所看到的。

为了获得预期的结果,您需要在排序后重新键入Collection中的项目。您可以使用Collection上的 values() 方法执行此操作(该方法仅在内部 items 数组上调用 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);