Laravel で (a OR b) AND (c OR d) のように複合的な AND/OR 検索をする方法
はじめに
Laravel で (a OR b) AND (c OR d)
のように複合的な AND/OR 検索する方法について整理した。
TL;DR
where(fucntion($query))
を使う- ↑ の中で
$query->where
や$query->orWhere
を使う
目次
環境・条件
1 | $ php -v |
詳細
php artisan tinker
で toSql()
を使って検証した。
前置き: 通常の AND/OR 検索
a AND b
や a OR b
は、where()
や orWhere
のチェーンで実現できる。
AND 検索
where()->where()
でチェーン。
1 | // AND: where()->where() |
OR 検索
where()->orWhere()
でチェーン
1 | // OR: where()->orWhere() |
本題: 複雑な AND/OR 検索
(a OR b) AND (c OR d)
を、上記と同じノリで実行するとこうなる。
1 | >>> User::where('name', 'LIKE', '%yama%') \ |
(a AND b) OR c
や (a OR b) AND (c OR d)
は where(function($query))
を使ってこうすると良い。
(a AND b) OR c
1 | // (a AND b) OR c |
(a OR b) AND (c OR d)
1 | // (a OR b) AND (c OR d) |
まとめ
where(fucntion($query))
を使う- ↑ の中で
$query->where
や$query->orWhere
を使う
参考文献
- mysql - Laravel Multiple WHERE() Operator Precedence - Stack Overflow
- Laravel・データベースからデータ取得する全実例 – console dot log
- リレーションのクエリ - Eloquent:リレーション 5.8 Laravel
関連記事
- Laravel で現在の URL 取得方法まとめ
- Laravel で Cookie を使う(参照/設定/削除)
- Laravel で PDF ファイルをブラウザで開く
- Laravel で withCount と having を使って絞り込み
- Laravel で「開始日時 < 終了日時」であることをバリデーションする
- Laravel で生 SQL を実行
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア