如何在一个关系中压缩两种关系

时间:2016-01-19 15:57:09

标签: laravel eloquent

当我想在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')

1 个答案:

答案 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();