Sous-requête avec WHERE IN dans Laravel
Dans Laravel, vous pouvez effectuer des requêtes complexes à l'aide de sous-requêtes. Un cas d'utilisation courant est une sous-requête avec une clause WHERE IN. Cet article montre comment implémenter efficacement ce type de requête.
Considérez la requête SQL suivante :
SELECT `p`.`id`, `p`.`name`, `p`.`img`, `p`.`safe_name`, `p`.`sku`, `p`.`productstatusid` FROM `products` p WHERE `p`.`id` IN ( SELECT `product_id` FROM `product_category` WHERE `category_id` IN ('223', '15') ) AND `p`.`active`=1
En utilisant l'ORM Eloquent de Laravel, vous pouvez réaliser cette requête avec le code suivant :
Products::whereIn('id', function($query){ $query->select('paper_type_id') ->from(with(new ProductCategory)->getTable()) ->whereIn('category_id', ['223', '15']) ->where('active', 1); }) ->get();
Dans cet exemple, nous commençons par créer une requête sur le modèle 'Produits' (« Produits ::whereIn (...) »). La clause 'whereIn' spécifie que nous souhaitons filtrer les 'Produits' en fonction du champ 'id', qui doit être inclus dans les résultats renvoyés par la sous-requête.
La sous-requête elle-même est définie à l'aide d'une fonction anonyme. ("$requête => ...'). Cette sous-requête sélectionne le champ « paper_type_id » dans la table « product_category », qui est supposé être disponible via une relation avec le modèle « ProductCategory ». Le nom de la table est obtenu à l'aide de la méthode 'with(...)->getTable()'.
Dans la sous-requête, nous ajoutons des conditions pour filtrer les résultats en fonction du champ 'category_id' et nous assurons que le Le champ « actif » est défini sur 1. Ces conditions permettent de affiner les catégories de produits à inclure dans les résultats finaux.
En utilisant cette approche, vous pouvez récupérer efficacement les produits qui répondent aux critères souhaités sans devoir effectuer une jointure coûteuse.
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!