Maison >base de données >tutoriel mysql >Comment sélectionner efficacement parmi les sous-requêtes à l'aide du générateur de requêtes de Laravel ?

Comment sélectionner efficacement parmi les sous-requêtes à l'aide du générateur de requêtes de Laravel ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-12 07:08:43306parcourir

How to Efficiently Select from Subqueries Using Laravel's Query Builder?

Sélectionnez les données des sous-requêtes à l'aide du générateur de requêtes Laravel

Question : Récupérer la valeur d'un agrégat de comptage à partir d'une sous-requête SQL à l'aide d'Eloquent ORM.

Méthode initiale :

<code class="language-php">$sql = Abc::from('abc AS a')
    ->groupBy('col1')
    ->toSql();

$num = Abc::from(\DB::raw($sql))
    ->count();</code>

Cette approche nécessite la génération manuelle de sous-requêtes SQL, ce qui n'est pas idéal.

Meilleure solution :

Le générateur de requêtes Laravel ne dispose actuellement pas d'une méthode dédiée pour créer des sous-requêtes dans la clause FROM. Les instructions brutes doivent être utilisées manuellement, avec une bonne gestion des liaisons :

<code class="language-php">// 定义子查询
$sub = Abc::where(...)->groupBy(...); // Eloquent Builder 实例

// 创建主查询
$count = DB::table(DB::raw("({$sub->toSql()}) AS sub"))
    ->mergeBindings($sub->getQuery()) // 正确合并绑定
    ->count();</code>

Remarque : Les liaisons doivent être fusionnées dans le bon ordre. Si des conditions supplémentaires sont ajoutées après la fusion, l'ordre doit être ajusté pour garantir une liaison correcte.

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