如果我试图从这个集合中删除一个项目
$examples = Example::where('example', '=', $data['example'])->get();
通过做
$examples->forget(20);
它并没有从集合中删除该项目,我仍然会返回最初在集合中的所有项目。我已经阅读了Laravel文档和API文档。它应该工作(我认为),但它没有。
有人能指出我在这里做错了什么吗?
这仍然返回一个对象。
$examples->forget(49);
return $examples->find(49);
P.S.任何其他方法,如push or get都有效。
非常感谢!
4条答案
按热度按时间gwbalxhn1#
你犯了一个小错误,其实你没有注意到。我自己做的:)。
Forget
使用array key
从集合中删除对象项。而
find
使用id
从集合中查找对象yzxexxkh2#
根据文档,它说
forget()
通过密钥工作。单词“key”是模糊的,因为他们的意思是说数组键也称为“index”,而不是模型键,即id。然而,在其他方法中,如
find()
或contains()
,它们使用单词“key”表示模型键,因此您可以看到混淆。查看源代码时,可以看到
forget()
方法位于Illuminate\Support\Collection
类中,而不在Illuminate\Database\Eloquent\Collection
中。我的理论是,支持类应该更通用,所以它不考虑模型键,但真的我不知道。
gupuwyp23#
我只是想补充一下阿南的答案。一旦你有了一个集合,你就可以像这样循环通过它来按ID删除
nkcskrwz4#
你能做的
与大多数其他集合方法一样,reject返回一个新的集合示例;它不修改调用它的集合。