如何将对象(模型类型对象)插入到Laravel中特定索引号的集合对象中?

2022-08-30 21:13:44

我读过Dayle Rees的Code Bright,以更多地了解Laravel中使用的Eloquent。也做了一些其他研究,但找不到我正在寻找的答案。Collection

我想将对象(类型对象)插入到特定位置的对象中。ModelCollection

例如:

这是返回的集合

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 53Attendance Object[2]

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\Collectionadd

$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\CollectionEloquent\Support\Collectionadd

相反,您可以使用空数组偏移量,这与在普通数组中插入新元素相同:

$collection[] = $item;

此表单也适用于 雄辩版 。Collection


答案 2

put 方法在集合中设置给定的键和值:

$collection = collect(['product_id' => 1, 'name' => 'Desk']);

$collection->put('price', 100);

$collection->all();

// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]

推荐