ホームページ >バックエンド開発 >PHPチュートリアル >Laravel で「WHERE IN」を含むサブクエリを効率的に使用してデータをフィルタリングするにはどうすればよいですか?

Laravel で「WHERE IN」を含むサブクエリを効率的に使用してデータをフィルタリングするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-02 03:04:10440ブラウズ

How Can I Efficiently Use Subqueries with `WHERE IN` in Laravel to Filter Data?

Laravel の 'WHERE IN' 句を使用したサブクエリ

Laravel では、'WHERE IN' 句内にサブクエリを作成すると効率的です。関連テーブルのデータに基づいて結果をフィルターする方法。特定のシナリオを検討してみましょう:

カテゴリに基づいて製品を取得するというタスクが課せられています。クエリには ID、名前、ステータスなどの列が含まれている必要があり、製品は ID '223' または '15' の特定のカテゴリに属している必要があります。

元のクエリ:

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

Laravel と同等の使用法クロージャ:

Products::whereIn('id', function($query){
    $query->select('paper_type_id')
    ->from(with(new ProductCategory)->getTable())
    ->whereIn('category_id', ['223', '15'])
    ->where('active', 1);
})
->get();

説明:

「whereIn」関数は引数としてクロージャを受け取り、その中でサブクエリを定義できます。

  • from(): が含まれるテーブルを選択します。サブクエリは結果を取得します。
  • select(): サブクエリから返される列を指定します。
  • whereIn() および where(): 指定された条件に基づいてサブクエリの結果をフィルタリングします。

クロージャを使用する利点:

  • コードの可読性と保守性が向上します。
  • 以下を含むより複雑なサブクエリが可能になります。複数の条件または結合。
  • 比較したデータベース呼び出しの数を減らすことでパフォーマンスを向上させます。複数の結合を使用すること。

以上がLaravel で「WHERE IN」を含むサブクエリを効率的に使用してデータをフィルタリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。