首页 > 解决方案 > Laravel 雄辩的两个关系之间的关系

问题描述

我希望你能理解我的标题,呵呵。这就是我想要实现的目标。

我有与RolesPermissions有关系的User模型。这是代码:

class User extends Model {

     ....

     public function roles() {
         return $this->belongsToMany('App\Models\Roles');
     }


     public function permissions() {
         return $this->belongsToMany('App\Models\Permissions');
     }

}

那工作很好,但我想要另一个这样的功能

    ....

    public function permissions_by_roles() {

    }

    ....

因为每个用户都有单独的权限和从角色继承的权限。我想根据用户的角色获取用户权限列表。我怎样才能做到这一点?这是我的桌子:

用户
角色
权限
role_user - 包含每个用户的所有角色(例如管理员、超级管理员、用户)
permission_user - 包含每个用户的所有权限(例如编辑、删除)
permission_role - 包含每个角色的所有权限。

我希望任何人都可以帮助我。先感谢您!:)

标签: phpmysqllaraveleloquent

解决方案


您可以hasManyThrough在必要时将关系与合并结合使用:

class User extends Model {

     ....

     public function roles() {
         return $this->belongsToMany('App\Models\Roles');
     }


     public function permissions() {
         return $this->belongsToMany('App\Models\Permissions');
     }

     public function inheritedPermissions() {
         return $this->hasManyThrough('App\Models\Permissions', 'App\Models\Roles');
     }    
}

然后,如果您想要所有用户权限,您可以执行以下操作:

 $user = User::with(["permissions", "inheritedPermissions"])->where("id", $id)->first();

所有权限将是:

$allPermissions = $user->permissions->merge($user->inheritedPermissions)->unique("id");

推荐阅读