Bagaimana untuk Menukar Pertanyaan MySQL Kompleks dengan Berbilang Pernyataan kepada Laravel Eloquent?

Mary-Kate Olsen
Lepaskan: 2024-10-26 06:49:30
asal
400 orang telah melayarinya

How to Convert Complex MySQL Queries with Multiple Statements to Laravel Eloquent?

Menukar Pertanyaan MySQL Kompleks dengan Berbilang Penyataan kepada Laravel Fasih

Dalam dunia pertanyaan pangkalan data, keupayaan untuk menukar pertanyaan SQL yang rumit kepada rakan sejawat Laravel Eloquent adalah penting. Satu cabaran sedemikian timbul apabila berurusan dengan pertanyaan MySQL berbilang pernyataan, yang melibatkan satu siri pernyataan seperti SEDIAKAN, LAKSANAKAN dan DEALLOCATE.

Pernyataan Masalah

Anda ada pertanyaan MySQL dengan berbilang pernyataan:

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'ifnull(SUM(case when location_code = ''',
      location_code ,
      ''' then quantity end),0) AS `',
      location_code , '`'
    )
  ) INTO @sql
FROM
  item_details;
SET @sql = CONCAT('SELECT item_number,SUM(quantity) as "total_quantity", ', @sql, ' 
                  FROM item_details
                   GROUP BY item_number');

PREPARE stmt FROM @sql;
EXECUTE stmt;

DEALLOCATE PREPARE stmt;
Salin selepas log masuk

Anda ingin menukar pertanyaan kompleks ini kepada Laravel Eloquent, tetapi anda tidak pasti cara mengendalikan berbilang pernyataan yang terlibat.

Penyelesaian

Walaupun beberapa aspek pertanyaan MySQL, seperti penyediaan dan pelaksanaan kenyataan, tidak boleh diterjemahkan secara langsung kepada Eloquent, fungsi teras boleh dicapai. Berikut ialah penyelesaian:

<code class="php">DB::table('item_details')
    ->selectRaw('GROUP_CONCAT(...) INTO @sql')
    ->get();

$sql = DB::selectOne('select @sql')
    ->{'@sql'};

ItemDetails::select('item_number', DB::raw('SUM(quantity) as total_quantity'))
    ->selectRaw($sql)
    ->groupBy('item_number')
    ->get();</code>
Salin selepas log masuk

Penjelasan

Penyelesaian ini ialah gabungan pertanyaan SQL yang Fasih dan mentah.

  • DB:: table('item_details')->selectRaw('GROUP_CONCAT(...) INTO @sql')->get(); melaksanakan pernyataan pertama, yang mencipta pembolehubah SQL sementara bernama @sql.
  • $sql = DB::selectOne('select @sql')->{'@sql'}; mendapatkan semula nilai pembolehubah @sql dan menyimpannya dalam pembolehubah $sql.
  • ItemDetails::select('item_number', DB::raw('SUM(kuantiti) sebagai jumlah_kuantiti'))-> selectRaw($sql)->groupBy('item_number')->get(); membina pertanyaan Eloquent utama. Ia menggunakan selectRaw($sql) untuk memasukkan rentetan SQL dinamik yang diperoleh daripada $sql.

Pendekatan ini membolehkan anda melaksanakan pertanyaan MySQL yang kompleks dalam konteks Laravel Eloquent, memudahkan kod anda dan mengekalkan kebolehselenggaraan .

Atas ialah kandungan terperinci Bagaimana untuk Menukar Pertanyaan MySQL Kompleks dengan Berbilang Pernyataan kepada Laravel Eloquent?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!