首页 文章

Laravel sql查询第3关系

提问于
浏览
4

我想向所有拥有“Manager”权限的用户显示

我有以下数据库

用户(与角色的多对多关系)| id:int role_user(pivot table)| role_id:int user_id:int roles(与用户的多对多关系,与权限有很多关系)| id:int权限(属于角色)| id:int name:string

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

2 回答

  • 1

    原始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
    
  • 3

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

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

相关问题