Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Menukar Pertanyaan MySQL Berbilang Pernyataan Kompleks kepada Laravel Eloquent?

Bagaimanakah Saya Boleh Menukar Pertanyaan MySQL Berbilang Pernyataan Kompleks kepada Laravel Eloquent?

Barbara Streisand
Barbara Streisandasal
2024-10-30 13:48:02503semak imbas

How Can I Convert a Complex Multi-Statement MySQL Query to Laravel Eloquent?

Menukar Pertanyaan MySQL Berbilang Pernyataan Kompleks kepada Laravel Fasih

Pertanyaan ini mengandungi satu siri pernyataan, termasuk GROUP_CONCAT, SET, PREPARE, LAKSANAKAN, dan DEALLOCATE, yang boleh menjadi sukar untuk ditukar kepada Laravel Eloquent. Mari kita pecahkan langkah demi langkah.

Pertama, Laravel tidak menyokong kenyataan yang disediakan seperti SEDIAKAN dan LAKSANAKAN. Walau bagaimanapun, kita boleh menggunakan pertanyaan mentah untuk melaksanakan setiap pernyataan ini secara individu.

<code class="php">DB::table('item_details')->selectRaw('GROUP_CONCAT(...) INTO @sql')->get();
DB::statement('SET @sql = CONCAT(...)');
DB::statement('DEALLOCATE PREPARE stmt');</code>

Seterusnya, kita perlu mendapatkan semula hasil penyata SET. Memandangkan ia adalah nilai skalar, kami boleh menggunakan selectOne() untuk mengambilnya.

<code class="php">$sql = DB::selectOne('select @sql')->{'@sql'};</code>

Akhir sekali, kami boleh menggunakan rentetan SQL yang diambil dalam pertanyaan Eloquent kami.

<code class="php">ItemDetails::select('item_number', DB::raw('SUM(quantity) as total_quantity'))
    ->selectRaw($sql)
    ->groupBy('item_number')
    ->get();</code>

Kod ini akan melaksanakan pertanyaan MySQL berbilang pernyataan menggunakan pertanyaan mentah dan mendapatkan hasil yang diharapkan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Pertanyaan MySQL Berbilang Pernyataan Kompleks kepada 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