"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je sélectionner efficacement parmi les sous-requêtes à l'aide de Laravel's Query Builder?

Comment puis-je sélectionner efficacement parmi les sous-requêtes à l'aide de Laravel's Query Builder?

Publié le 2025-03-23
Parcourir:528

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

Laravel Query Constructeur gère efficacement les sous-questionnaires

]

Lors de l'utilisation d'ORM éloquente pour récupérer des données à partir de sous-requêtes, les développeurs utilisent souvent tosql () et les requêtes natives en combinaison. Bien que cette méthode soit efficace, elle n'est pas assez intuitive. Voici une solution plus efficace:

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

SELECT COUNT(*) 
FROM (
  SELECT * 
  FROM abc 
  GROUP BY col1
) AS a;

Laravel nous permet de fusionner les requêtes natives en requêtes éloquentes en utilisant MergeBindings . Tout d'abord, nous créons une instance de constructeur éloquent pour la sous-requête:

$sub = Abc::where(..)->groupBy(..);

Ensuite, nous utilisons db :: table pour créer une nouvelle table qui fait référence à la sous-requête et définissez manuellement la liaison correspondante:

$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
    ->mergeBindings($sub->getQuery()) // 获取底层查询构造器
    ->count();

Cette approche garantit que la liaison correcte est appliquée à la requête fusionnée, ce qui donne le résultat que nous voulons sans effectuer manuellement les opérations de chaîne.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3