リレーション先も含めてOR絞り込みをする
概要
Laravelアプリケーションにおいて、検索機能等を実装する際にリレーション先も含めてOR(または)で絞り込みを行う方法をまとめる。
環境
- Laravel 9
方法
orWhereHas()を使用する。
$qury->where('title', '%{$keyword}%') // 通常の絞り込み
->orWhere('body', '%{$keyword}%') // 通常のOR絞り込み
// 第2引数にリレーション先の絞り込み条件を指定するクロージャーを取る
->orWhereHas('categories', function($q) use ($keyword) {
$q->where('name', '%{$keyword}%');
})->get();