keigo-uの備忘録

沖縄で情報系の大学に通う大学生の技術ブログです。

リレーション先も含めて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();