Laravelでサブクエリを使用したWHERE IN句の使い方


まず、サブクエリを使用してWHERE IN句を実行する基本的な方法を説明します。例えば、usersテーブルから特定の条件を満たすユーザーの情報を取得したい場合を考えてみましょう。以下のコードは、usersテーブルからidが特定の値のユーザーを取得する例です。

$ids = [1, 2, 3]; // 検索条件となるIDのリスト
$users = DB::table('users')
            ->whereIn('id', function ($query) use ($ids) {
                $query->select('id')
                      ->from('users')
                      ->whereIn('id', $ids);
            })
            ->get();

上記の例では、whereInメソッドの第二引数にクロージャを渡しています。このクロージャ内で、サブクエリを定義しています。サブクエリでは、usersテーブルからid$idsの値のいずれかに一致するレコードのidを選択しています。

また、より複雑な条件を持つサブクエリを使用することもできます。例えば、他のテーブルとの結合や条件の組み合わせなどを実現することができます。

$users = DB::table('users')
            ->whereIn('id', function ($query) {
                $query->select('user_id')
                      ->from('orders')
                      ->where('status', 'completed');
            })
            ->where('age', '>', 18)
            ->get();

上記の例では、ordersテーブルからstatusが"completed"のレコードのuser_idを選択し、そのuser_idusersテーブルのidカラムに一致するユーザーを取得しています。さらに、ageが18より大きいユーザーのみを絞り込んでいます。

以上が、Laravelでサブクエリを使用したWHERE IN句の使い方の概要です。これを参考にして、自身のプロジェクトに応じたクエリを組み立ててみてください。