Как вставить объект (объект типа модели) в объект коллекции в 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]