Laravel与数据透视表的关系

时间:2017-07-21 14:16:43

标签: php laravel laravel-5 eloquent laravel-5.4

我的数据库中有3个表:

users (id);
interests (id);
users_interests (user_id, interests_id);

我希望能够以这种方式获取所有用户的兴趣:

$interests = $user->interests

这是我在User.php模型中编写的,遵循laravel的doc:

public function interests() { 
    return $this->hasManyThrough(
         'App\Interest', 'App\UserInterest', 
         'user_id', 'id', 'interest_id'
    );
}

但即使用户有游戏,它也会返回空白。所以必须有一些我做错了

有人帮我吗?

1 个答案:

答案 0 :(得分:2)

我认为belongs to many可以完成这项任务:

public function interests() { 
    return $this->belongsToMany(
         'App\Interest', 
         'users_interests', 
         'user_id', 
         'interests_id'
    );
}

docs

中的示例非常相似

如果您要将users_interests表重命名为interest_user和列 对于单数形式interests_id,您只需要第一个参数:

 public function interests() { 
        return $this->belongsToMany(App\Interest::class);
    }

根据我的理解,hasManyThrough用于在关系中向前跳转(也在文档中描述):

  

“has-many-through”关系提供了一个方便的快捷方式   通过中间关系访问遥远的关系。