Laravelのwherehasで複数のリレーションを繋げてデータ取得する方法

「Laravelのwherehasで複数のリレーションを繋げてデータ取得する方法」というタイトルですが、もう少し詳細に伝えると、
リレーションがネスト化しているデータをwherehasで条件指定してから取得する方法です。

リレーションがネスト化している??一体どういうことと思う方もいるかもしれません。

例えば、
user -> posts がリレーションされていて
posts -> comments がリレーションされている場合です。

今回やりたいことは、user -> post -> comment と一括でつなぎます。
userデータを「commentデータを条件」に取得することです。
例えば、commentで、「よろしく」と言っている条件に絞って、userデータを取得する。と言った感じです。

実際の取得方法では、下記です。
※posts, comments はリレーション名称です。

$commentUser = User::with('posts.comments')
    ->whereHas('posts.comments', function ($query) {
     return $query->where('message', "よろしく");
    })
    ->get();

ネストしたリレーションを取得する場合のポイントは1つです。
リレーションネストを. でつなぎます。

with('posts.comments')
whereHas('posts.comments', function ($query)

と言った感じです。
ご活用下さいませ。

リレーションを利用したデータ取得に関しては下記もご参考下さい。

コメントを残す

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