Как вставить объект (объект типа модели) в объект коллекции в Laravel по определенному номеру индекса?
Я прочитал Dayle Rees Code Bright, чтобы узнать больше о Eloquent Collection
, используемом в Laravel. Другие исследования также не смогли найти ответ, который я искал.
Я хочу вставить объект (Model
объект типа) в объект Collection
в определенной позиции.
Например:
Это возвращенная коллекция
Illuminate\Database\Eloquent\Collection Object
(
[0] => Attendance Object
([present_day] => 1)
[1] => Attendance Object
([present_day] => 2)
[2] => Attendance Object
([present_day] => 4)
[3] => Attendance Object
([present_day] => 5)
)
Как вы можете видеть выше [present_day]
имеют значения от 1 to 5
, но в последовательности отсутствует значение 3
. Теперь, что я действительно хочу сделать, я хочу явно разместить новый Attendance Object
в позиции коллекции Object [2]
номер индекса/позиции, таким образом, нажав остальную часть объекта Attendance. Я действительно стараюсь сделать это правильно. Как я могу сделать это, чтобы сделать объект коллекции таким же, как показано ниже:
Illuminate\Database\Eloquent\Collection Object
(
[0] => Attendance Object
([present_day] => 1)
[1] => Attendance Object
([present_day] => 2)
[2] => Attendance Object // This is where new object was added.
([present_day] => 3)
[4] => Attendance Object
([present_day] => 4)
[5] => Attendance Object
([present_day] => 5)
)
Я думаю, что есть некоторые методы, которые позволят делать именно так, если это массив. Поскольку это Collection
, я не уверен, как это сделать.
Примечание. Я не хочу преобразовывать его в массив и делать вставку внутри массива. По какой-то причине я хочу получить этот вывод строго в объекте Collection
.
Ответы
Ответ 1
Чтобы вставить элемент в коллекцию, обратитесь к этому ответу; Отвечать
В принципе, разбивает коллекцию, добавляет элемент в соответствующий индекс.
Вы можете добавить элемент в объект Eloquent\Collection
с помощью метода add
;
$collection->add($item); // Laravel 4
или
$collection->push($item); // Laravel 5
Затем вы можете изменить порядок сбора с помощью метода sortBy
;
$collection = $collection->sortBy(function($model){ return $model->present_day; });
Это приведет к изменению порядка коллекции с помощью атрибута present_day
.
Обратите внимание, что приведенный выше код будет работать, только если вы используете Illuminate\Database\Eloquent\Collection
. Если вы используете простой Eloquent\Support\Collection
, метода add
нет.
Вместо этого вы можете использовать пустой смещение массива, то же самое, что и вставка нового элемента в обычный массив:
$collection[] = $item;
Эта форма также работает над Eloquent версии Collection
.
Ответ 2
Метод put устанавливает заданный ключ и значение в коллекции:
$collection = collect(['product_id' => 1, 'name' => 'Desk']);
$collection->put('price', 100);
$collection->all();
// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]