Eloquent hasManyThrough 也得到中间table信息

Eloquent hasManyThrough also get middle table information

我有相同的 table 结构,如 laravel 文档中提到的 HasManyThrough 关系 hasManyThrough

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

现在,当我列出 post 个特定国家/地区时。我也需要 post 的用户信息。我的意思是来自 pivot table(users)

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

以上returns post数据而已..

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

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

如果您正在加载大量数据并且不想加载整个 User 实例,您甚至可以指定仅从用户 table:

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

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

有关详细信息,请参阅 documentation

试试这个:

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