Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih Elegan daripada Subkueri menggunakan Pembina Pertanyaan Laravel?

Bagaimana untuk Memilih Elegan daripada Subkueri menggunakan Pembina Pertanyaan Laravel?

Mary-Kate Olsen
Lepaskan: 2025-01-12 10:34:43
asal
1007 orang telah melayarinya

How to Elegantly Select from a Subquery using Laravel's Query Builder?

Pilih data secara elegan daripada subkueri menggunakan pembina pertanyaan Laravel

Dalam projek baru-baru ini, anda menggunakan Eloquent ORM untuk mendapatkan semula data daripada pangkalan data. Salah satu keperluan adalah menggunakan subquery untuk mengira bilangan rekod dalam lajur tertentu. Berikut ialah pertanyaan SQL yang anda cuba laksanakan:

SELECT COUNT(*) FROM 
(SELECT * FROM abc GROUP BY col1) AS a;
Salin selepas log masuk

Percubaan pertama anda menggunakan kaedah from() dan groupBy() model Abc:

$sql = Abc::from('abc AS a')->groupBy('col1')->toSql();
$num = Abc::from(\DB::raw($sql))->count();
print $num;
Salin selepas log masuk

Walau bagaimanapun, anda sedang mencari penyelesaian yang lebih elegan.

Penyelesaian lengkap

Pembina pertanyaan Laravel tidak mempunyai cara langsung untuk membuat subkueri dalam klausa FROM. Oleh itu, anda perlu membina pernyataan SQL mentah secara manual. Untuk melakukan ini, anda boleh menggunakan kaedah berikut:

$sub = Abc::where(...)->groupBy(...); // Eloquent Builder 实例

$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
    ->mergeBindings($sub->getQuery()) // 合并所有绑定
    ->count();
Salin selepas log masuk

Untuk memastikan hasil yang tepat, pastikan anda menggabungkan ikatan dalam susunan yang betul. Jika anda mempunyai klausa mengikat lain, anda harus meletakkannya selepas mergeBindings():

$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )

    // ->where(...) 错误的位置

    ->mergeBindings($sub->getQuery()) // 合并绑定

    // ->where(...) 正确的位置

    ->count();
Salin selepas log masuk

Penyelesaian ini menyediakan cara yang mudah dan cekap untuk melaksanakan subkueri yang mengandungi syarat dan pengikatan yang kompleks.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Elegan daripada Subkueri menggunakan Pembina Pertanyaan Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan