「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)
と言った感じです。
ご活用下さいませ。
リレーションを利用したデータ取得に関しては下記もご参考下さい。