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!