Nested WhereHasメソッドを使用すると、親モデルとネストした子モデルの両方に対して条件を指定できます。以下に具体的な例を示します。
例1: 親モデルとネストした子モデルの両方に条件を指定する
$posts = Post::whereHas('comments', function ($query) {
$query->where('approved', true);
})->whereHas('author', function ($query) {
$query->where('active', true);
})->get();
上記の例では、Postモデルにリレーションシップが設定されたcommentsとauthorモデルに対して、それぞれ条件を指定しています。最終的な結果は、approvedがtrueであり、かつactiveがtrueのコメントを持つアクティブな投稿のコレクションとなります。
例2: ネストした子モデルの条件を更に絞り込む
$posts = Post::whereHas('comments', function ($query) {
$query->where('approved', true)
->where('spam', false);
})->get();
上記の例では、commentsモデルに対してapprovedがtrueでかつspamがfalseの条件を指定しています。これにより、承認された非スパムのコメントを持つ投稿のコレクションが取得されます。
Nested WhereHasメソッドを使用することで、より複雑なクエリを直感的に構築することができます。上記の例は一部ですが、実際の使用例に応じてさまざまな条件を組み合わせることができます。
以上が、LaravelのNested WhereHasの使用方法と例です。これを活用することで、リレーションシップのあるデータモデルを柔軟にクエリすることができます。