[Laravel]リレーション先テーブルにデータが存在するものだけを取得する方法

はじめに

Laravelでリレーション先に紐づくデータが存在するものだけを取得したい時ってありませんか?
例えば学生を保存するテーブルと所属する部活を保存しているテーブルがあったとします。
このときに、何らかの部活に所属している学生だけを取得したい!
そんなときです。似たようなケースがあったのでその時の解決方法をメモします。

以下のような学生テーブルのモデルと部活所属テーブルのモデルがあるとします。


これは学生と部活が1対多であることを示しています。
このような場合に部活に所属している学生だけを取得します。

方法

以下のようにwhereHasとwhereExistsを組み合わせることで取得できます。

withの引数はリレーション先を指定しているStudentクラスのメソッド名です。
whereExistsでリレーション先が存在するものだけに絞り込んでいます。

以上です。

おすすめの記事