・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');
}

・users_tableの中身
画像の説明をここに入力

・posts_tableの中身
'postsテーブル'
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でできないのは何故
なのでしょうか?
よろしくお願いいたします。