查询两个多对多的关系

时间:2014-08-15 12:25:11

标签: laravel laravel-4 eloquent

我有一个用户表:

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 :(得分: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();