通过每个键中的键“忘记”一个集合的项目

时间:2018-07-11 09:06:34

标签: laravel laravel-5

我想知道在Laravel中使用remove方法时能否通过键forgeteach()

我已经尝试过了:

$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)。

有人能对此有所启发吗?

1 个答案:

答案 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),仅包含被认为可移动的值。

您可以只使用集合外部的forgetforget方法是不可变规则的例外,因为它确实修改了基础数据)通过键将其删除,但我认为这不是您要的。

$Items->forget('your_key');