如何在Laravel中查询has-many-through关系

时间:2016-03-14 00:09:17

标签: laravel laravel-5

在Laravel中查询此类关系有哪些方法

表:

  • 用户
  • 角色
  • 权限

其中:

  • 每个角色都有一组权限
  • 每个用户都可以属于多个角色
  • 用户通过角色拥有许多权限
  • 用户和角色通过中间表相关联。因此,Roles表中没有user_id列

实际上我正在尝试做类似的事情:

User()->Roles()->Privileges()->get() 

但是我不确定这样做的laravel方式

数据库结构更新:

USERS
   id
   name
   email

ROLES
   id
   role

USERS_ROLES
   id
   user_id (foreign key)
   role_id (foreign key)

PRIVILEGES
   id
   role_id (foreign key)
   privilege

USER belongsToMany Roles
ROLE belongsToMany Users
USER has many privileges through ROLES

2 个答案:

答案 0 :(得分:1)

问题是您尝试将userprivileges方法联系起来hasManyThrough()

为此,privileges必须拥有多个角色,但属于许多角色。这里你需要的是belongsToManyThrough关系,默认情况下Eloquent不提供。

所以,你有两个选择:

  1. 自己创建查询
  2. 使用this之类的包,它提供belongsToThrough()关系。
  3. 我没有使用我链接过的软件包,但我相信它能够实现它所说的内容。

答案 1 :(得分:0)

在您的用户模型中,您将拥有以下关系:

public function privileges()
{
    return $this->hasManyThrough('Privilege', 'Role');
}

然后在您的代码中,您可以通过以下方式访问用户的权限:

$privileges = $user->privileges;