首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel雄辩- pluck()角色名

Laravel雄辩- pluck()角色名
EN

Stack Overflow用户
提问于 2020-10-27 19:55:02
回答 3查看 1.6K关注 0票数 4

我正在尝试从带有角色的请求中获取经过身份验证的用户对象。我用的是斯帕蒂拉拉-权限和Laravel 8。

从请求中获取用户对象,如下

代码语言:javascript
复制
$request->user()->getRoleNames()->pluck('name');
return $request->user();

返回

代码语言:javascript
复制
{
   "id":1,
   "name":"User name",
   "email":"User email",
   "email_verified_at":null,
   "company":"--",
   "phone":"--",
   "created_at":"--",
   "updated_at":"--",
   "roles":[
      {
         "id":1,
         "name":"Super Admin",
         "guard_name":"web",
         "created_at":"--",
         "updated_at":"--",
         "pivot":{
            "model_id":1,
            "role_id":1,
            "model_type":"App\\Models\\User"
         }
      }
   ]
}

我需要归还的东西

代码语言:javascript
复制
{
   "id":1,
   "name":"User name",
   "email":"User email",
   "email_verified_at":null,
   "company":"--",
   "phone":"--",
   "created_at":"--",
   "updated_at":"--",
   "roles":["Super Admin"]
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-27 20:17:40

另一种选择是使用hiddenappends和访问器,比如getRoleNamesAttribute()

代码语言:javascript
复制
class User extends Model {
  ...

  // This will hide `roles` from your `User`, when converted to JSON/Array/etc
  protected $hidden = ['roles'];

  // This will add `role_names` to your `User`, when converted to JSON/Array/etc
  protected $appends = ['role_names'];

  // Accessible via `$user->role_names`, or `user.role_names` in JSON
  public function getRoleNamesAttribute() {
    return $this->roles->pluck('name'); 
  }

  ... // Everything else
}

这样做,与return $request->user();一起将自动使roles不可见,并附加role_names。在您的代码中,您应该得到输出:

代码语言:javascript
复制
{
   "id":1,
   "name":"User name",
   "email":"User email",
   "email_verified_at":null,
   "company":"--",
   "phone":"--",
   "created_at":"--",
   "updated_at":"--",
   "role_names":["Super Admin"]
}
票数 2
EN

Stack Overflow用户

发布于 2020-10-27 20:01:40

roles添加到用户对象中,如下所示

代码语言:javascript
复制
$user = $request->user();
$user->roles = $user->roles()->pluck('name');
return $user;
票数 2
EN

Stack Overflow用户

发布于 2021-11-11 09:47:23

您也可以这样做:

代码语言:javascript
复制
$user->roles = User::find($user->id)->getRoleNames();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64561953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档