Laravelでリレーション先(hasMany)の情報を利用し絞り込み
・users_table
・posts_table
という2つのテーブルがあり、user has many postsの関係です。
usersは、id・name
postsは、id・user_id・content・created_at
のカラムを持っています。
そこで、2018年9月3日以降に投稿したユーザを取得したいと考えました。
$user = User::with(['posts' => function($query){
$query->where('created_at', '>', '2018-09-03');
}])->get();
dd($user);
・User.php
public function posts(){
return $this->hasMany('App\Post', 'user_id', 'id');
}
・posts_tableの中身
9月3日以降に投稿したユーザはuser_idが1または、3のユーザですので
dd($user)では、user1・user3が取得される予定ですが、三人とも取得されてしまいます。
リレーション先の情報を元に、絞り込むにはどうすれば良いでしょうか?
よろしくお願い致します。
[追記]
$user = User::whereHas('posts', function($query){
$query->where('created_at', '>', '2018-09-03');
});
を利用することによって、解決しましたが、whereHasでできて、eager loadでできないのは何故
なのでしょうか?
よろしくお願いいたします。