Laravel sql查询第三关系


Laravel sql queries on 3rd relationship

我想显示所有权限名为"Manager"的用户

我有以下数据库

users(多对多角色关系)| id: int

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

角色(多对多关系)与用户有多对多关系与权限)| 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();