Eloquent を使用して Laravel で合計およびグループ化する方法
このクエリの目標は、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 中国語 Web サイトの他の関連記事を参照してください。