我想向所有拥有"经理"
权限名称的用户展示我有以下数据库
用户(与角色的多对多关系)| id:int
role_user(数据透视表)| role_id:int user_id:int
角色(与用户的多对多关系,并且有很多关系 有权限)| ID:INT
权限(属于角色)| id:int name:string
有人可以指出我如何编写查询的正确方向,我使用laravel 5.2但很高兴原始sql。
答案 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();