我想知道在Laravel中使用remove
方法时能否通过键forget
或each()
。
我已经尝试过了:
$Items = Items::all();
$Items->each(function($Item, $Key){
if($Item->removable){
$this->forget($Key);
}
});
我也尝试过这个:
$Items = Items:all();
$Items->each(function($Item, $Key) use (&$Items){
if($Item->removable){
$Items->forget($Key);
}
});
似乎只是删除所有项目,而不是那些具有我的true
条件值的项目(例如$Item->removable
)。
有人能对此有所启发吗?
答案 0 :(得分:2)
集合通常是不可变的,这意味着您实际上不能更改对象中的基础数据。集合上的操作通常会返回一个新集合,其中包含基于原始集合的新项目。
使用filter
后,您可以实现自己的目标。通过传递闭包,对于要保留的商品,返回true
,对于要忘记的商品,返回false
。
$Items = $Items->filter(function ($Item, $Key) {
return ! $Item->removable;
});
或者您可以使用reject
,它与filter
相同,但是相反,返回true
会从集合中删除该项目,而返回false
会将项目保留在集合中集合。
$Items = $Items->reject(function ($Item, $Key) {
return $Item->removable;
});
这两个方法将创建一个新集合(在上面的示例中覆盖$Items
),仅包含不被认为可移动的值。
您可以只使用集合外部的forget
(forget
方法是不可变规则的例外,因为它确实修改了基础数据)通过键将其删除,但我认为这不是您要的。
$Items->forget('your_key');