我想向所有拥有“Manager”权限的用户显示
我有以下数据库
用户(与角色的多对多关系)| id:int role_user(pivot table)| role_id:int user_id:int roles(与用户的多对多关系,与权限有很多关系)| id:int权限(属于角色)| id:int name:string
有人可以指点我如何编写查询的正确方向,我正在使用laravel 5.2但很高兴原始sql .
原始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
Eloquent的查询构建器提供 whereHas() 方法,允许过滤相关模型的属性 . 它也支持嵌套关系,因此以下应该可以解决这个问题:
$managers = User::whereHas('roles.permissions', function($query) { $query->where('name', '=', 'Manager'); })->get();
2 回答
原始sql看起来像:
Eloquent的查询构建器提供 whereHas() 方法,允许过滤相关模型的属性 . 它也支持嵌套关系,因此以下应该可以解决这个问题: