Laravel Modelを””複数条件””で検索を色々/whereIn/orWhere/orWhereHas/function($query)

Modelを複数条件で抽出際の方法解説します。
複数条件といっても様々な複数条件が存在するかと思います。
使用用途別に解説していけたらと思います。

①:複数のカラムで、’どれか’のカラムの検索条件に合致する場合

orWhereを利用します。

sex, age, 複数カラムで検索をしています。

Human::
    where('sex', 'men')
    ->orWhere('age', '>=', 40)
    ->get();

②:特定のカラムで、複数の検索条件の’どれか’に該当

whereInを利用します。

Human::
    whereIn('age', [30,31,32,33,40,41,42,43])
    ->get();

ageカラムの中で、該当するものを抽出します。

③:複数のカラムで、複数の検索条件に該当する場合

whereInをorWhereで接続して利用します。 

$nationality = ['japan', 'china', 'korean'];

Human::
    whereIn('age', [30,31,32,33,40,41,42,43])
    ->orWhere(function($query) use($nationality) {
            $query->whereIn('nationality',$nationality);
        })
    ->get();

④:複数テーブルで、’どれか’の検索条件に該当

下記記事にて記述しています。

複数テーブルと書いていますが、厳密には1つのModelからリレーション先のデータを他のテーブルデータとして捉えています。

⑤:複数テーブルで、複数カラムの検索条件に該当

EducationalBackground
 の国が$countries含まれる OR 専攻が$magersに含まれる
OR
Job
 の専門性が$specialtiesに含まれる

Human::
    whereHas('EducationalBackground', function ($query) use($countries, $magers) {

        return $query->whereIn('country',$countries);
                    ->orWhere(function($query) use($magers) {
                        $query->whereIn('mager',$magers);
                    });
    })
    ->orWhereHas('Job', function ($query) use($specialties) {
        return $query->whereIn('specialty',$specialties);
    })
    ->get();

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です