假设我有一个Post对象。我希望已加星标的人随后根据某些条件对其进行过滤。
多年来我一直这样做:
Post::where('is_starred', true)->get()->filter(function($post){
...
});
这很好但今天我发现即使我删除了get()
来电,它仍然可以使用。我不确切知道为什么会这样,因为where()
返回一个QueryBuilder而filter()
是一个集合方法。如果相反filter()
我会调用其他一些收集方法,例如each()
。
Post::where('is_starred', true)->filter(function($post){
...
});
所以我的问题是:收集方法可以应用于QueryBuilder吗?为什么?我查看了QueryBuilder类,了解如何在那里应用这些方法,但我找不到任何东西。在Laravel的文档中有什么相关的内容吗?
答案 0 :(得分:0)
这是我的错。这种行为发生在each()
但filter()
。 Eloquent\Builder
有一个each()
方法,在其实现中调用chunk()
执行get()
并将回调应用于每个元素。
为filter()
设置相同的内容会很有意思,不是吗?