【问题标题】:Laravel sql queries on 3rd relationshipLaravel sql查询第三个关系
【发布时间】:2017-01-11 22:49:12
【问题描述】:

我想显示所有权限名称为“经理”的用户

我有以下数据库

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

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

roles(与用户的多对多关系和多对多关系 有权限) | id:int

权限(属于角色)| id:int 名称:字符串

谁能指出我如何编写查询的正确方向,我使用的是 laravel 5.2,但对原始 sql 很满意。

【问题讨论】:

    标签: php mysql laravel laravel-5 eloquent


    【解决方案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
    

    【讨论】:

    • 完美,我重新编码以使其更像 laravel $managerUsers= DB::table('users') ->join('role_user', 'users.id', '=', 'role_user. user_id') ->join('roles', 'role_user.role_id', '=', 'roles.id') ->join('permissions', 'roles.id', '=', 'permissions.role_id' ) ->where('permissions.name', '=', 'manager') ->get();
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 1970-01-01
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 2014-12-21
      • 1970-01-01
      • 2015-08-06
      相关资源
      最近更新 更多