如何在Laravel 中使用Eloquent 進行求和和分組
在此查詢中,目標是利用Eloquent 來計算特定列,同時根據另一列將結果分組。問題中給出的範例,其中 no_of_pages 列的總和需要按 users_editor_id 分組,作為實際說明。
問題中提供的初始嘗試存在邏輯問題。由於 sum() 立即執行查詢並傳回結果,因此在處理查詢後會嘗試進行分組。 Laravel 不支援在執行查詢後套用分組,因此會出現錯誤。
要解決此問題,需要更改查詢結構。不要在 sum() 之後使用 groupBy(),而是先使用 groupBy('users_editor_id') 將結果分組。這將有效地為每個唯一的 users_editor_id 值建立子查詢。
接下來,新增 selectRaw() 子句以指定分組結果中感興趣的欄位。在本例中,它是聚合總和: sum(no_of_pages) as sum。
最後,使用 pluck() 從結果中只擷取 sum 和 users_editor_id 欄位。這將傳回一個數組,其中 users_editor_id 作為鍵,相應的總和作為值。
這是修改後的查詢:
Document::groupBy('users_editor_id') ->selectRaw('sum(no_of_pages) as sum, users_editor_id') ->pluck('sum','users_editor_id');
另一個方法是使用 selectRaw() 子句包含 sum(no_of_pages) 作為子查詢中的附加欄位。但是,此方法會產生一個偽模型集合,其中包含原始列和作為附加欄位的計算總和。
Document::groupBy('users_editor_id') ->selectRaw('*, sum(no_of_pages) as sum') ->get();
以上是如何在 Laravel Eloquent 中有效率地對資料進行求和和分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!