我读过戴尔·里斯(Dayle Rees(的《光明代码》(Code Bright(,以了解更多关于Laravel中使用的雄辩Collection
的信息。也做了一些其他研究,但找不到我正在寻找的答案。
我想将一个对象(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
。现在,我真正想做的是,我想在集合对象的索引号/位置[2]
显式放置一个新Attendance Object
,从而推动出席对象的其余部分。我真的很难做到这一点。我怎样才能做到这一点,使上面的集合对象看起来像下面这样:
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
对象中。
要将项目插入集合,请参阅此答案;答
基本上,拆分集合,在相关索引处添加项目。
您可以使用 add
方法将项添加到Eloquent'Collection
对象;
$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;
此表格也适用于 雄辩版 Collection
.
put 方法在集合中设置给定的键和值:
$collection = collect(['product_id' => 1, 'name' => 'Desk']);
$collection->put('price', 100);
$collection->all();
// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]
假设您要在位置 4 处输入集合项
$position = 4;
$top = $collection->splice(0,$position);
$bottom = $collection->splice($position);
$top->push($newItem);
$collection = $top->concat($bottom);