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();