Maison >base de données >tutoriel mysql >Comment utiliser « whereIn » de Laravel avec une sous-requête ?

Comment utiliser « whereIn » de Laravel avec une sous-requête ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-25 13:32:55526parcourir

How to Use Laravel's `whereIn` with a Subquery?

Sous-requête Laravel avec la clause WHERE IN

Une tâche courante dans Laravel consiste à récupérer des données à l'aide d'une sous-requête dans une clause WHERE IN. Pour y parvenir, vous pouvez utiliser la méthodewhereIn() avec une fermeture.

Par exemple, disons que vous avez la requête 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

Pour traduire cette requête en Laravel, vous peut utiliser 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 ce code:

  • Products::whereIn('id', ...) démarre la sous-requête dans la clause WHERE IN.
  • La fonction de fermeture définit la sous-requête.
  • $query->select('paper_type_id') sélectionne la colonne à renvoyer à partir du sous-requête.
  • $query->from(with(new ProductCategory)->getTable()) spécifie la table à utiliser dans la sous-requête.
  • $query->whereIn( 'category_id', ['223', '15']) ajoute les conditions au sous-requête.
  • $query->where('active', 1) ajoute une autre condition à la sous-requête.
  • ->get() récupère les résultats.

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