Laravelで複数条件の絞り込みを行う方法(チェーン記法)完全ガイド
生徒
「Laravelでユーザーを検索するとき、名前と年齢など複数条件を組み合わせたい場合はどうしたらいいですか?」
先生
「Eloquentでは、チェーン記法を使うことで複数条件の絞り込みが簡単にできます。」
生徒
「チェーン記法って聞いたことがありますが、どういう意味ですか?」
先生
「チェーン記法とは、メソッドをつなげて連続で処理を行う方法です。EloquentではwhereやorderByをつなげることで複雑な検索ができます。」
生徒
「具体的な例を見たいです!」
1. 複数条件を使った基本の絞り込み
例えば、ユーザー情報を管理するusersテーブルから「名前が田中で、年齢が20歳以上」のユーザーを取得したい場合、Eloquentでは次のように書きます。
use App\Models\User;
$users = User::where('name', '田中')
->where('age', '>=', 20)
->get();
ここで、whereを2回連続で書くことで、条件をANDでつなぐことができます。つまり、両方の条件を満たすユーザーだけが取得されます。
2. OR条件を使った複数条件の検索
場合によっては「名前が田中または名前が鈴木」のように、どちらかの条件に合うデータを取得したいことがあります。この場合はorWhereを使います。
$users = User::where('name', '田中')
->orWhere('name', '鈴木')
->get();
このように書くことで、田中または鈴木のどちらかの名前を持つユーザーが取得されます。
3. 条件をグループ化して複雑な検索を行う
さらに複雑な条件の場合、クロージャ(無名関数)を使って条件をグループ化できます。例えば「年齢が20歳以上で、名前が田中または鈴木」のユーザーを取得する場合は次のように書きます。
$users = User::where('age', '>=', 20)
->where(function($query){
$query->where('name', '田中')
->orWhere('name', '鈴木');
})
->get();
この書き方により、条件をグループ化して論理的に正しい検索ができます。
4. チェーン記法の便利さ
チェーン記法を使うと、複数のwhereやorWhere、orderByなどを連続でつなげることができます。これにより、コードがシンプルで見やすくなり、複雑な検索条件も整理しやすくなります。
例えば「20歳以上のユーザーで名前が田中または鈴木を年齢順で並べたい」ときも、次のように書けます。
$users = User::where('age', '>=', 20)
->where(function($query){
$query->where('name', '田中')
->orWhere('name', '鈴木');
})
->orderBy('age', 'asc')
->get();
5. 初心者でも押さえておきたいポイント
複数条件の絞り込みは、ユーザー検索や商品検索、ブログ記事のフィルターなどで頻繁に使います。Eloquentのチェーン記法を理解しておくことで、条件追加や順序指定が簡単になります。
最初はAND条件やOR条件の基本から始め、慣れてきたらクロージャを使った複雑な条件グループ化にも挑戦すると良いでしょう。こうした検索方法を覚えることで、より高度なデータ操作が可能になり、実務でも役立ちます。
また、メソッドチェーンでコードをつなげることにより、SQLを書かなくても直感的にデータベース検索ができるため、初心者でも扱いやすいのがEloquentの強みです。