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 ?
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!