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();
我有相同的 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();