Laravel での WHERE IN によるサブクエリ
Laravel では、サブクエリを使用して複雑なクエリを実行できます。一般的な使用例は、WHERE IN 句を使用したサブクエリです。この記事では、このクエリ タイプを効果的に実装する方法を説明します。
次の SQL クエリを考えてみましょう:
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 の Eloquent ORM を使用すると、次のコードでこのクエリを実現できます:
Products::whereIn('id', function($query){ $query->select('paper_type_id') ->from(with(new ProductCategory)->getTable()) ->whereIn('category_id', ['223', '15']) ->where('active', 1); }) ->get();
この例では、「Products」モデルに対するクエリを作成することから始めます。 ('Products::whereIn(...)')。 「whereIn」句は、「id」フィールドに基づいて「Products」をフィルタリングすることを指定します。このフィールドは、サブクエリによって返される結果に含まれる必要があります。
サブクエリ自体は、匿名関数を使用して定義されています。 ('$query => ...')。このサブクエリは、「product_category」テーブルから「paper_type_id」フィールドを選択します。このフィールドは、「ProductCategory」モデルとの関係を通じて使用できると想定されています。テーブル名は、「with(...)->getTable()」メソッドを使用して取得されます。
サブクエリ内で、「category_id」フィールドに基づいて結果をフィルタリングする条件を追加し、 「アクティブ」フィールドは 1 に設定されています。これらの条件は、最終結果に含める製品カテゴリを絞り込むのに役立ちます。
このアプローチを使用すると、目的を満たす製品を効率的に取得できます。コストのかかる結合を実行することなく基準を取得できます。
以上がLaravel EloquentでWHERE IN句を使用したサブクエリを実装する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。