Laravel / Eloquent: hasManyThrough WHERE

В документации Eloquent сказано, что я могу передать ключи желаемого отношения к hasManyThrough .

Допустим, у меня есть модели с именем Country, User, Post. Модель страны может иметь много сообщений через модель пользователей. Я сказал, что просто позвоню:

$this->hasManyThrough('Post', 'User', 'country_id', 'user_id'); 

Это прекрасно! Но как я могу получить эти сообщения только для пользователя с идентификатором 3?

Может ли кто-нибудь помочь здесь?

Related of "Laravel / Eloquent: hasManyThrough WHERE"

Итак, вот оно:

модели: в Country много User которых много Post

Это позволяет нам использовать hasManyThrough как в вашем вопросе:

 // Country model public function posts() { return $this->hasManyThrough('Post', 'User', 'country_id', 'user_id'); } 

Вы хотите получить сообщения данного пользователя для этого отношения, так что:

 $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 

НО это будет проще, более читабельным и более красноречивым, если вы используете это вместо этого: (поскольку он не имеет ничего общего с страной, когда вы ищете сообщения пользователя с идентификатором 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 

Подводя итог: hasManyThrough – это способ напрямую вложить вложенные отношения, т. hasManyThrough все должности для данной страны, а не поиск конкретной модели.

 $user_id = 3; $country = Country::find($country_id); $country->posts()->where('users.id', '=', $user_id)->get();