So here it goes:
models: Country has many User has many Post
This allows us to use hasManyThrough like in your question:
// Country model public function posts() { return $this->hasManyThrough('Post', 'User', 'country_id', 'user_id'); }
You want to get posts of a given user for this relation, so:
$country = Country::first(); $country->load(['posts' => function ($q) { $q->where('user_id', '=', 3); }]); // or $country->load(['posts' => function ($q) { $q->has('user', function ($q) { $q->where('users.id', '=', 3); }); }) $country->posts; // collection of posts related to user with id 3
BUT it will be easier, more readable and more eloquent if you use this instead: (since it has nothing to do with country when you are looking for the posts of user with id 3)
// User model public function posts() { return $this->hasMany('Post'); } // then $user = User::find(3); // lazy load $user->load('posts'); // or use dynamic property $user->posts; // it will load the posts automatically // or eager load $user = User::with('posts')->find(3); $user->posts; // collection of posts for given user
To sum up: hasManyThrough is a way to get nested relation directly, ie. all the posts for given country, but rather not to search for specific through model.
Usermodel and get posts for the user you want. Or query the relation usinghasmethod. Or use query builder.. Ask precise question to get accurate answer