Conversion d'une requête MySQL multi-instructions en Laravel Eloquent
Considérez la requête MySQL suivante :
SELECT <br> GROUP_CONCAT(DISTINCT</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><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> <div class="code" style="position:relative; padding:0px; margin:0px;"><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!