在查询生成器上运行集合方法

时间:2017-08-05 14:05:10

标签: php laravel

假设我有一个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的文档中有什么相关的内容吗?

1 个答案:

答案 0 :(得分:0)

这是我的错。这种行为发生在each()filter()Eloquent\Builder有一个each()方法,在其实现中调用chunk()执行get()并将回调应用于每个元素。

filter()设置相同的内容会很有意思,不是吗?