2013-12-22 28 views
3

如果我尝试做忘记不起作用

$examples->forget(20); 

从这个集合

$examples = Example::where('example', '=', $data['example'])->get(); 

删除的项目不会从集合中删除的项目,我还是拿回所有原来在那里的物品。我已阅读Laravel文档和api文档。它应该工作(我认为),但它没有。

有人能指出我在这里做错了吗?

这仍然返回一个对象。

$examples->forget(49); 
return $examples->find(49); 

P.S.其他方法像推或获得作品。

非常感谢!

回答

5

你犯了一个小错误,其实你没注意到。我做了我自己:)。使用array key从集合中删除对象项目。

Array(0 => 'abc' 
1 => 'bcd' 
49 => 'aaa' 
) 

$examples->forget(49); 
        ^^ array key 49 

凡为,find使用id从一个集合

table: examples 

id example 
1 abc 
49 bce 

$examples->find(49); 
       ^^ `example id` 
+0

谢谢你的确是这个问题。有没有什么方法可以轻松地通过对象的id“忘记”? – Vincent

+0

您可以使用过滤器。 – Anam

0

我只是想对添加到亚南的答案找对象。一旦你有一个集合,你可以再通过其循环像这样通过ID

function forgetById($collection,$id){ 
    foreach($collection as $key => $item){ 
     if($item->id == $id){ 
      $collection->forget($key); 
      break; 
     } 
    } 
    return $collection; 
} 

$examples = Example::where('example', '=', $data['example'])->get(); 

$examples = forgetById($examples,20); 
0

删除据它说,forget()作品关键的文档。单词“密钥”是不明确的,因为它们意味着要说的是数组密钥,也被称为“索引”,而不是模型密钥,它是id。

然而,在其他方法,如find()或他们用的是“”是指模型的关键,所以你可以看到的混乱。

从源代码可以看到forget()方法可以在Illuminate\Support\Collection类中找到,而不是在Illuminate\Database\Eloquent\Collection中找到。

我的理论是,支持类应该是更通用的,所以它不考虑模型的关键,但我真的不知道。