Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Jumlah dengan betul dengan GroupBy dalam Laravel Eloquent?

Bagaimana untuk Mengira Jumlah dengan betul dengan GroupBy dalam Laravel Eloquent?

Barbara Streisand
Barbara Streisandasal
2024-12-30 00:11:39546semak imbas

How to Correctly Calculate Sum with GroupBy in Laravel Eloquent?

Mengira Jumlah dengan GroupBy dalam Laravel Eloquent

Dalam Laravel, Eloquent ORM menawarkan cara yang berkesan untuk berinteraksi dengan pangkalan data. Satu tugas biasa ialah mengira jumlah lajur semasa mengumpulkan mengikut medan tertentu. Walaupun menggunakan kaedah sum() kelihatan mudah, ia boleh menyebabkan ralat disebabkan oleh susunan pelaksanaan.

Pendekatan Salah

$this->data['no_of_pages'] = Document::sum('no_of_pages')
                            ->groupBy('users_editor_id'); // Call to undefined method

Dalam kod di atas, kaedah groupBy() dipanggil selepas kaedah sum(), yang menyebabkan ralat kerana sum() melaksanakan pertanyaan dan mengembalikan hasilnya sebelum groupBy() boleh digunakan.

Penyelesaian Betul

Untuk mengira jumlah dengan groupBy dengan betul, gunakan pendekatan berikut:

Pendekatan 1 (Disyorkan)

Document::groupBy('users_editor_id')
    ->selectRaw('sum(no_of_pages) as sum, users_editor_id')
    ->pluck('sum', 'users_editor_id');

Kaedah ini menggunakan kaedah selectRaw() untuk mencipta alias bagi jumlah yang dikira (jumlah). Kemudian, kaedah pluck() mengekstrak medan sum dan users_editor_id, memberikan hasil tatasusunan bersekutu.

Pendekatan 2

Document::groupBy('users_editor_id')
    ->selectRaw('*, sum(no_of_pages) as sum')
    ->get();

Kaedah ini mencipta pseudo-ORM terhasil dengan menambahkan medan jumlah pada setiap model dokumen. Namun, ia kurang diingini kerana hasilnya bukanlah koleksi ORM sebenar.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Jumlah dengan betul dengan GroupBy dalam Laravel Eloquent?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn