Laravel sql查询第3关系

时间:2016-09-04 10:09:04

标签: php mysql laravel laravel-5 eloquent

我想向所有拥有"经理"

权限名称的用户展示

我有以下数据库

  

用户(与角色的多对多关系)| id:int

     

role_user(数据透视表)| role_id:int user_id:int

     

角色(与用户的多对多关系,并且有很多关系   有权限)| ID:INT

     

权限(属于角色)| id:int name:string

有人可以指出我如何编写查询的正确方向,我使用laravel 5.2但很高兴原始sql。

2 个答案:

答案 0 :(得分:3)

原始sql看起来像:

select * from users 
inner join role_user on users.id=role_user.user_id
inner join roles on role_user.role_id=roles.id
inner join permissions on roles.id=permissions.role_id
where permissions.name='Manager'
group by users.id

答案 1 :(得分:1)

Eloquent的查询构建器提供 whereHas()方法,该方法允许过滤相关模型的属性。它也支持嵌套关系,因此以下应该可以解决这个问题:

$managers = User::whereHas('roles.permissions', function($query) {
  $query->where('name', '=', 'Manager');
})->get();