Maison > Article > développement back-end > Comment puis-je convertir une requête MySQL multi-instructions complexe en Laravel Eloquent ?
Conversion d'une requête MySQL multi-instructions complexe en Laravel Eloquent
Cette requête contient une série d'instructions, notamment GROUP_CONCAT, SET, PREPARE, EXECUTE et DEALLOCATE, qui peuvent être difficiles à convertir en Laravel Eloquent. Décomposons-le étape par étape.
Premièrement, Laravel ne prend pas en charge les instructions préparées comme PREPARE et EXECUTE. Cependant, nous pouvons utiliser des requêtes brutes pour exécuter chacune de ces instructions individuellement.
<code class="php">DB::table('item_details')->selectRaw('GROUP_CONCAT(...) INTO @sql')->get(); DB::statement('SET @sql = CONCAT(...)'); DB::statement('DEALLOCATE PREPARE stmt');</code>
Ensuite, nous devons récupérer le résultat de l'instruction SET. Puisqu'il s'agit d'une valeur scalaire, nous pouvons utiliser selectOne() pour la récupérer.
<code class="php">$sql = DB::selectOne('select @sql')->{'@sql'};</code>
Enfin, nous pouvons utiliser la chaîne SQL récupérée dans notre requête Eloquent.
<code class="php">ItemDetails::select('item_number', DB::raw('SUM(quantity) as total_quantity')) ->selectRaw($sql) ->groupBy('item_number') ->get();</code>
Ce code exécutera la requête MySQL multi-instructions à l'aide de requêtes brutes et récupérera les résultats attendus.
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!