2016-11-14 98 views
0

我可以使用作用域執行基本的模型相關查詢(例如選擇那些今天有生日的用戶),範圍顯然被放置在Eloquent模型中並返回一個Eloquent Query Builder實例。但是如果我需要執行更復雜的查詢,比如說通過電子郵件類型分組大量的電子郵件日誌表,加入用戶和電子郵件並應用一些聚合,會怎麼樣?由於查詢的結果字段是混合的(電子郵件,電子郵件類型,用戶,日誌字段),所以我必須使用數據庫查詢生成器。我在猶豫是否想給建造者打電話最好的地方。Laravel中的數據庫查詢生成器的地方

是可以在我加入其他表中的主力機型靜態方法:

class ConcreteModel extends Model { 

     public static function someQuery(): \Illuminate\Database\Query\Builder { 
     return \DB::table('some_table')->join('something'); 
     } 

    } 

或許寧可把這樣的東西在需要它的服務?

+0

控制器或服務可能是此類查詢的好地方。 – linuxartisan

+0

@linuxartisan我害怕使用任何業務邏輯混淆我的控制器,這就是爲什麼我認爲查詢應該放在使用服務中作爲模型的替代方法。 – Sergey

+0

爲什麼不使用存儲庫模式?您可以輕鬆分離業務邏輯和數據結構的各個層。 –

回答

0

嗯,我想出了使用Visitor模式來封裝複雜查詢的想法。訪問者對象封裝了具體的查詢,雄辯的模型可以接受客戶端傳遞的訪問者,並在他們身上調用標準方法傳遞給訪問者,並將來自訪問者的結果的StdClass集合移交給客戶端。似乎它可以爲我工作。