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

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

Linda Hamilton
Libérer: 2025-01-12 09:28:41
original
783 Les gens l'ont consulté

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

Le générateur de requêtes Laravel gère efficacement les sous-requêtes

Lorsqu'ils utilisent Eloquent ORM pour récupérer des données à partir de sous-requêtes, les développeurs utilisent souvent une combinaison de toSql() et de requêtes natives. Bien que cette approche fonctionne, elle n'est pas assez intuitive. Une solution plus efficace est proposée ici :

Par exemple, pour extraire le nombre de résultats de la sous-requête suivante :

<code class="language-sql">SELECT COUNT(*) 
FROM (
  SELECT * 
  FROM abc 
  GROUP BY col1
) AS a;</code>
Copier après la connexion

Laravel nous permet de fusionner des requêtes natives en requêtes Eloquent en utilisant mergeBindings. Tout d’abord, nous créons une instance Eloquent Builder pour la sous-requête :

<code class="language-php">$sub = Abc::where(..)->groupBy(..);</code>
Copier après la connexion

Nous utilisons ensuite DB::table pour créer une nouvelle table qui référence la sous-requête et définir manuellement les liaisons correspondantes :

<code class="language-php">$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
    ->mergeBindings($sub->getQuery()) // 获取底层查询构造器
    ->count();</code>
Copier après la connexion

Cette approche garantit que les liaisons correctes sont appliquées à la requête fusionnée pour obtenir les résultats souhaités sans avoir besoin de manipulation manuelle des chaînes.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal