Maison >développement back-end >tutoriel php >Comment puis-je convertir une requête multi-instructions MySQL en Laravel Eloquent ?

Comment puis-je convertir une requête multi-instructions MySQL en Laravel Eloquent ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 04:29:31198parcourir

How can I convert a MySQL multi-statement query to Laravel Eloquent?

Conversion d'une requête MySQL multi-instructions en Laravel Eloquent

Considérez la requête MySQL suivante :

SELECT <br> GROUP_CONCAT(DISTINCT</p>
<pre class="brush:php;toolbar:false">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;

Le défi réside dans la conversion de cette requête en Laravel Eloquent, notamment en considérant les différentes instructions : PREPARE, EXECUTE, SET et DEALLOCATE.

Solution :

La conversion est en grande partie implique des requêtes brutes :

DB::table('item_details')->selectRaw('GROUP_CONCAT(...) INTO @sql')->get();<br> DB::statement('SET @sql = CONCAT(...)');<br>DB::statement('PREPARE stmt FROM @sql');<br>DB::statement('EXECUTE stmt'); <br>DB::statement('DEALLOCATE PREPARE stmt');<br>

Voici une implémentation plus détaillée :

DB::table( 'item_details')->selectRaw('GROUP_CONCAT(...) INTO @sql')->get();<br>$sql = DB::selectOne('select @sql')->{' @sql'};<br>ItemDetails::select('item_number', DB::raw('SUM(quantity) as total_quantity'))</p>
<pre class="brush:php;toolbar:false">->selectRaw($sql)
->groupBy('item_number')
->get();

Cette approche gère efficacement la conversion de la requête MySQL d'origine en Laravel Eloquent, en utilisant une combinaison de requêtes brutes et de méthodes Eloquent.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn