Laravel Eloquent の GroupBy を使用した合計の計算
Laravel では、Eloquent ORM がデータベースと対話する強力な方法を提供します。一般的なタスクの 1 つは、特定のフィールドでグループ化しながら列の合計を計算することです。 sum() メソッドの使用は簡単そうに見えますが、実行順序が原因でエラーが発生する可能性があります。
間違ったアプローチ
$this->data['no_of_pages'] = Document::sum('no_of_pages') ->groupBy('users_editor_id'); // Call to undefined method
上記のコードでは、 groupBy() メソッドは sum() メソッドの後に呼び出されます。この場合、sum() はクエリを実行し、groupBy() が実行される前に結果を返すため、エラーが発生します。
正しい解決策
groupBy で合計を正しく計算するには、次のアプローチを使用します。
アプローチ 1 (推奨)
Document::groupBy('users_editor_id') ->selectRaw('sum(no_of_pages) as sum, users_editor_id') ->pluck('sum', 'users_editor_id');
このメソッドは、selectRaw() メソッドを使用して計算された合計 (sum) の別名。次に、pluck() メソッドは sum フィールドと users_editor_id フィールドを抽出し、連想配列の結果を提供します。
アプローチ 2
Document::groupBy('users_editor_id') ->selectRaw('*, sum(no_of_pages) as sum') ->get();
このメソッドは擬似 ORM を作成します。各ドキュメント モデルに合計フィールドを追加することによって結果が得られます。ただし、結果は真の ORM コレクションではないため、あまり望ましくありません。
以上がLaravel EloquentでGroupByを使用して合計を正しく計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。