![[Laravel]リレーション先テーブルにデータが存在するものだけを取得する方法](https://www.yukiiworks.com/wp-content/uploads/2019/05/laravel.png)
はじめに
Laravelでリレーション先に紐づくデータが存在するものだけを取得したい時ってありませんか?
例えば学生を保存するテーブルと所属する部活を保存しているテーブルがあったとします。
このときに、何らかの部活に所属している学生だけを取得したい!
そんなときです。似たようなケースがあったのでその時の解決方法をメモします。
例
以下のような学生テーブルのモデルと部活所属テーブルのモデルがあるとします。
1 2 3 4 5 6 7 8 | class Student extends Model { // 学生と所属する部活の関係 public function club() { return $this->hasMany('App\Eloquent\BelongsClub'); } } |
1 2 3 4 5 6 7 | class BelongsClub extends Model { public function belongsStudent() { return $this->belongsTo('App\Eloquent\Student'); } } |
これは学生と部活が1対多であることを示しています。
このような場合に部活に所属している学生だけを取得します。
方法
以下のようにwhereHasとwhereExistsを組み合わせることで取得できます。
1 2 3 4 5 6 | Student::with('club') ->whereHas('club', function ($query) { $query->whereExists(function ($query) { return $query; }) ->get(); |
withの引数はリレーション先を指定しているStudentクラスのメソッド名です。
whereExistsでリレーション先が存在するものだけに絞り込んでいます。
以上です。
![[Laravel]datetime型の項目を年・月・日・日付・時刻で検索する方法](https://www.yukiiworks.com/wp-content/uploads/2019/05/laravel-300x209.png)

![[Android]RecyclerViewで一番下にスクロールさせる方法](https://www.yukiiworks.com/wp-content/uploads/2019/10/android-studio-e1585186990750-150x150.jpg)
![[Flutter]debugとreleaseビルドをコードから判別する方法](https://www.yukiiworks.com/wp-content/uploads/2020/08/flutter-150x150.png)
![[Swift]iOSのChartsで凡例を非表示にする方法](https://www.yukiiworks.com/wp-content/uploads/2019/04/swift-150x150.png)
![[Laravel]blade上で変数の存在確認](https://www.yukiiworks.com/wp-content/uploads/2019/05/laravel-150x150.png)
![[realm][Android]relam導入時のエラー"configuration with name 'kapt' not found."について](https://www.yukiiworks.com/wp-content/uploads/2019/04/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f36333036302f31363961343966382d623766622d613335612d353264342d6539653934373731383031302e6a706567-150x150.jpg)
![[AWS]Node.jsでSSMパラメータストアの値を取得する](https://www.yukiiworks.com/wp-content/uploads/2020/03/aws-eyecatch-960x504-1-150x150.png)

