Maison >développement back-end >tutoriel php >Comment optimiser les requêtes Laravel à l'aide de sous-requêtes dans les clauses WHERE IN ?

Comment optimiser les requêtes Laravel à l'aide de sous-requêtes dans les clauses WHERE IN ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-09 13:46:18724parcourir

How to Optimize Laravel Queries Using Subqueries in WHERE IN Clauses?

Sous-requête dans Laravel WHERE IN Clause

Dans Laravel, la création d'une requête qui récupère les données où le champ ID est inclus dans une sous-requête peut être atteint efficacement. Bien qu'une opération JOIN suffise également, cet article se concentre sur l'optimisation des performances en utilisant une sous-requête dans la clause WHERE IN.

Considérez 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 répliquer cette requête dans Laravel , utilisez 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();

En incorporant une sous-requête dans la clause WHERE IN, cette instruction exécute efficacement l'opération de recherche et de récupération requise. Cette approche est particulièrement bénéfique pour les applications sensibles aux performances où la minimisation des appels à la base de données est cruciale.

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