LaravelのwhereHasコールバックを使ったEloquentの例


例1: リレーションの存在を確認する

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

上記の例では、Postモデルに関連するcommentsテーブルがあります。whereHasメソッドを使用して、commentsテーブルのapprovedカラムがtrueであるPostのみを取得しています。

例2: 関連するモデルの条件を組み合わせる

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

この例では、commentsテーブルのapprovedカラムがtrueであり、spamカラムがfalseであるPostのみを取得しています。

例3: 関連するモデルの数を制限する

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

この例では、commentsテーブルのapprovedカラムがtrueであるPostのうち、関連するコメントが5つ以上あるものを取得しています。第4引数には比較演算子を指定することができます。

これらは、whereHasメソッドを使った基本的なコールバックの例です。他にも様々な条件や組み合わせを指定することができます。Laravelの公式ドキュメントにはさらに詳しい情報が記載されていますので、ぜひ参考にしてください。