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

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

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 13:48:02506parcourir

How Can I Convert a Complex Multi-Statement MySQL Query to 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!

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