2017-08-05 44 views
1

可以說我有一個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

這是我的錯。這種行爲發生在each(),但filter()Eloquent\Builder有一個each()方法,在其實現中調用chunk()執行get()並將回調應用於每個元素。

如果filter()的值相同,對嗎?