当我想在Laravel中压缩两个关系时,我遇到了一些问题。 有3个模型表。
table1: episodes --> model: Episode
relations -- hasMany --> posts
-- belongsToMany --> users
pivot-table2: posts --> model: Post
columns -- episode_id
-- user_id
relations -- belongsTo --> user
-- belongsTo --> episode
table3: users --> model: User
是的,这是多对多的关系。我们可以在Episode模型上获得帖子或用户关系。
如果我有一个模型集合
$episode = new App\Episode
如何像
那样急于加载$episodes = new App\Episode::with('posts.user').
也许我可以这样做
$episode = new App\Episode::with('posts.user')->where('id','=','targetId')
但似乎首先会加入三个表然后进行查询以获得目标剧集。
有没有像
那样的方法 $episode = new App\Episode::find(targetId)-> with('posts.user')
答案 0 :(得分:0)
如果您使用posts表作为数据透视表,那么你做错了。
剧集模特:
public function users()
{
return $this->belongsToMany('App\User', 'posts');
}
// I would name my pivot table different than posts, if you don't pass the second parameter Laravel will look for episode_user table
用户模型:
public function episodes()
{
return $this->belongsToMany('App\Episode', 'posts');
}
在您的控制器中:
$user = User::find(1);
$user->episodes();
$episodes = Episode::find(1);
$episodes->users();