Laravelの「whereHas」メソッドの使用方法


  1. 単純なリレーションシップの場合:

    $posts = Post::whereHas('comments', function ($query) {
       $query->where('approved', true);
    })->get();

    この例では、PostモデルとCommentモデルの間にリレーションシップがあります。whereHasメソッドを使用して、commentsリレーションシップの条件として、approvedカラムがtrueであるコメントを持つ投稿を取得しています。

  2. ネストされたリレーションシップの場合:

    $posts = Post::whereHas('comments.user', function ($query) {
       $query->where('active', true);
    })->get();

    この例では、PostモデルとCommentモデルの間にリレーションシップがあり、さらにCommentモデルとUserモデルの間にもリレーションシップがあります。whereHasメソッドを使用して、commentsリレーションシップとその内部のuserリレーションシップの条件として、activeカラムがtrueであるコメントを持つ投稿を取得しています。

これらは一部の例ですが、異なるシナリオに応じてwhereHasメソッドを使用してクエリをカスタマイズできます。Laravelの公式ドキュメントには、さらに詳しい情報が記載されていますので、参考にすることをおすすめします。