首页 文章

查询两个多对多的关系

提问于
浏览
0

我有一个用户表:

id | name

我有一个角色表:

id | role

我有一个user_role数据透视表:

user_id | role_id

我有权限表:

id | permission

我有一个role_permissions数据透视表:

role_id | permission_id

用户属于许多角色 .

角色属于许多用户 .

权限属于许多角色 .

如何查询权限表,提供权限和用户ID . 我基本上想要查找用户是否具有特定权限 .

到目前为止,我有:

$data = Permission::whereHas('roles', function($q){
        //do I need another whereHas here linking roles and users?
    })->where('permission', 'edit')->get();

1 回答

  • 0

    最好的方法是加入表格 . 目前在框架中没有很好的方法来实现这种链式关系 .

    Permission::query()
        ->join('permission_role', 'permission_role.role_id', '=', 'permissions.id')
        ->join('roles', 'roles.id', '=', 'permission_role.role_id')
        ->join('role_user', 'role_user.user_id', '=', 'roles.id')
        ->join('users', 'users.id', '=', 'role_user.user_id')
        ->where('users.whatever', '=', 'something')
        ->where('permissions.permission', '=', 'edit')
        ->get();
    

相关问题