首页 > 解决方案 > 如何在 Laravel 6/7 中访问多个多对多关系

问题描述

祝大家好日子,

我有 3 个模型,即用户、角色和权限。
用户与角色
具有多对多关系角色与权限具有多对多关系

我有 5 个表,用户、角色、角色用户、权限、权限角色

我的问题是:用户模型中有没有办法访问分配给用户角色的所有权限?

谢谢大家。

代码:

用户模型

class User extends Authenticatable
{
     public function roles()
     {
           return $this->belongsToMany(Role::class);
     }

     public function permissions()
     {
           //how can i get all permissions of the user
     }
}



好榜样

class Role extends Authenticatable
{
     public function users()
     {
           return $this->belongsToMany(User::class);
     }

     public function permissions()
     {
           return $this->belongsToMany(Permission:class);
     }
}



权限模型

class Permission extends Authenticatable
{
     public function roles()
     {
           return $this->belongsToMany(Role::class);
     }
}

标签: laraveleloquenteloquent-relationship

解决方案


尝试这个:

class User extends Authenticatable
{
     public function roles()
     {
           return $this->belongsToMany(Role::class);
     }

     public function permissions()
     {
           $permissionList = [];

           foreach($this->roles as $role){
               foreach($role->permissions as $permission){
                   if(!in_array($permission->name, $permissionList){
                       $permissionList[] = $permission->name
                   }
               }
           }

           return $permissionList;
     }
}

我认为你必须先迭代你的角色才能获得权限,你也可以使用 append 属性来获得你的用户权限作为它的属性, 在这里阅读更多。

哦,我记得你也可以使用嵌套的预先加载,所以你可以像这样在角色内部调用你的权限,$user->with('roles.permissions')->get()但是当然你必须首先从角色关系中迭代它来获取权限数据。


推荐阅读