Проблема в том, что метод filter()
не изменяет ключ базового массива коллекций. Итак, Коллекция по-прежнему представляет собой массив, просто ваш массив выглядит так:
[
4 => Object4,
7 => Object7,
]
Хотя это вполне допустимый массив в PHP, это неправильный массив в JSON. Поскольку это не может быть представлено в виде массива в формате JSON, оно преобразуется в объект в формате JSON.
Чтобы правильно представить это в виде массива в JSON, вам просто нужно повторно ввести массив Collection. Правильным методом для этого является метод values()
. Все, что он делает, это вызывает array_values
для базового массива. Это превратит приведенный выше массив в это:
[
0 => Object4,
1 => Object7,
]
Теперь это правильный массив с числовым индексом, который JSON может понять и будет обрабатывать как массив, а не как объект.
Хотя flatten
может работать в этом конкретном случае (ваша Коллекция представляет собой набор моделей Eloquent), на самом деле это неправильный метод и может привести к непредвиденным последствиям. Кроме того, он будет выполнять много дополнительной логики, которая не нужна. Лучше всего использовать правильный метод для того, чего вы пытаетесь достичь, и это метод values()
.
$obj = Cars::with('brand')->orderBy('id')->get();
return $obj->filter(function($value, $key)
{
return $value->display == true;
})
->values();
person
patricus
schedule
12.02.2017
flatten()
может делать то, что вам нужно, но вам нужно предоставить еще один пример кода, чтобы увидеть, как вы получаете этот вывод. - person Dwight   schedule 12.02.2017flatten()
должно помочь - person manniL   schedule 12.02.2017flatten()
в этом случае работает,values()
является подходящим методом для использования. Я добавил ответ с объяснением. - person patricus   schedule 12.02.2017