【问题标题】:How to get all roles and associated permissions to them如何获取所有角色及其相关权限
【发布时间】:2021-11-24 10:33:53
【问题描述】:

我正在尝试获取所有角色,无论他们是否被分配了一些权限,如果被分配了权限,那么我想使用 eloquent 将它们显示在每个角色的前面。

我正在尝试的查询

    $roles = role::select('roles.*','role_permissions.permission_id')
    ->leftjoin('role_permissions', 'roles.id', '=', 'role_permissions.role_id')
    ->get();

此查询的问题是,如果为角色分配了多个权限,它会重复该角色。 例如:

它以这个顺序显示结果(这只是为了快速理解)。 我怎样才能以这种方式获得['role_id' => 1, 'permission_id' => [1,2] ] 雄辩的结果。
榜样

public function permissions()
{
  return $this->belongsToMany(\App\Models\permission::class, 'role_permissions');
} 

权限模型

public function roles()
{
  return $this->belongsToMany(\App\Models\Role::class, 'role_permissions');
}  

【问题讨论】:

    标签: eloquent eloquent-relationship


    【解决方案1】:

    你可以使用收集方法:

    Role::with('role_permissions')->all()->map(function(Role $role){
      return $role->permission_ids = $role->permissions->pluck('id');
    })
    

    或者您可以在角色模型中使用自定义 getter:

    public function getPermissionIdsAttribute()
    {
      return $this->permissions->pluck('id');
    }
    $role->permission_ids;
    

    【讨论】:

      猜你喜欢
      • 2021-05-29
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 2012-10-14
      • 2016-04-28
      • 2020-12-05
      相关资源
      最近更新 更多