Pembina pertanyaan Laravel dengan cekap mengendalikan subkueri
Apabila menggunakan Eloquent ORM untuk mendapatkan semula data daripada subkueri, pembangun sering menggunakan gabungan toSql()
dan pertanyaan asli. Walaupun pendekatan ini berfungsi, ia tidak cukup intuitif. Penyelesaian yang lebih cekap disediakan di sini:
Sebagai contoh, untuk mengekstrak kiraan hasil daripada subkueri berikut:
<code class="language-sql">SELECT COUNT(*) FROM ( SELECT * FROM abc GROUP BY col1 ) AS a;</code>
Laravel membolehkan kami menggabungkan pertanyaan asli ke dalam pertanyaan Eloquent menggunakan mergeBindings
. Mula-mula, kami mencipta contoh Eloquent Builder untuk subkueri:
<code class="language-php">$sub = Abc::where(..)->groupBy(..);</code>
Kami kemudian menggunakan DB::table
untuk mencipta jadual baharu yang merujuk subquery dan secara manual menetapkan pengikatan yang sepadan:
<code class="language-php">$count = DB::table( DB::raw("({$sub->toSql()}) as sub") ) ->mergeBindings($sub->getQuery()) // 获取底层查询构造器 ->count();</code>
Pendekatan ini memastikan bahawa pengikatan yang betul digunakan pada pertanyaan yang digabungkan untuk mendapatkan hasil yang kita inginkan tanpa memerlukan manipulasi rentetan manual.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memilih dengan Cekap daripada Subkueri Menggunakan Pembina Pertanyaan Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!