Maison  >  Article  >  développement back-end  >  Comment traduire des instructions MySQL complexes avec PREPARE, EXECUTE et DEALLOCATE en Laravel Eloquent ?

Comment traduire des instructions MySQL complexes avec PREPARE, EXECUTE et DEALLOCATE en Laravel Eloquent ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 14:33:31907parcourir

How to Translate Complex MySQL Statements with PREPARE, EXECUTE, and DEALLOCATE into Laravel Eloquent?

Traduction d'instructions MySQL complexes en Laravel Eloquent

Laravel Eloquent fournit un mécanisme élégant pour exécuter des requêtes SQL à l'aide de code PHP expressif. Cependant, la conversion de requêtes MySQL complexes à plusieurs instructions peut être intimidante. Cet article vous guide dans la transformation de ces requêtes en Eloquent, en abordant spécifiquement les défis présentés par des instructions telles que PREPARE, EXECUTE, SET et DEALLOCATE.

Approche de conversion de requête

Pour convertir la requête MySQL fournie, nous utiliserons principalement des requêtes brutes dans Eloquent. Voici la répartition :

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

En les convertissant en code Eloquent, nous obtenons :

$result = DB::table('item_details')->selectRaw('GROUP_CONCAT(...) INTO @sql')->get();
$sql = DB::selectOne('select @sql')->{'@sql'};
$results = ItemDetails::select('item_number', DB::raw('SUM(quantity) as total_quantity'))->selectRaw($sql)->groupBy('item_number')->get();

Cette approche utilise une série de requêtes brutes pour obtenir le résultat souhaité. La requête initiale concatène le SQL souhaité dans une variable utilisateur @sql. Par la suite, PHP récupère cette variable à l'aide d'une requête distincte, puis construit une requête Eloquent pour exécuter l'instruction SQL finale, qui inclut le SQL concaténé.

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