雄辩的hasManyThrough也获得中间表信息

时间:2019-05-17 07:05:45

标签: laravel relationship has-many-through

我具有与laravel文档中提到的HasManyThrough关系injector

相同的表结构
countries
  id - integer
  name - string 

users
  id - integer
  country_id - integer
  name - string

posts
  id - integer
  user_id - integer
  title - string

并定义与文档中相同的关系。

public function posts()
{
    return $this->hasManyThrough(
        'App\Post', 'App\User',
        'country_id', 'user_id', 'id'
    );
}

现在,当我列出特定国家的帖子时。我也需要帖子用户的信息。我的意思是来自数据透视表的信息(用户)

$posts = Country::find(2)->posts();

以上仅返回帖子数据。

2 个答案:

答案 0 :(得分:2)

您需要的是急于在帖子旁边加载用户,这可以通过Builder上的with()方法来实现:

$posts = Country::find(2)->posts()->with('user')->get();

如果您要加载大量数据,并且不希望加载整个User实例,则甚至可以指定仅从用户表中检索哪些字段:

$posts = Country::find(2)->posts()->with('user:id,name')->get();

然后,您可以简单地使用$post->user->name或迭代集合时所需的任何东西。

有关更多信息,请参考documentation

答案 1 :(得分:1)

尝试一下:

$posts = Country::find(2)->posts()->with('user')->get();