Eloquent:Api资源 - 无法从数据透视表中检索信息

时间:2018-05-18 09:00:27

标签: php laravel


我目前正在使用Laravel 5.6,我想创建一个用户访问控制。我使用了三个表:user (id, username, email, password)role (id, role, desc)和数据透视表role_user (user_id, role_id)。我的代码如下:

用户模型

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

角色模型:

/**
* Role Model
*/
public function users() {
    return $this->belongsToMany(User::class);
}

Api资源:

/**
* Api Resource
*/
public function toArray($request)
{
   return [
      'id' => $this->id,
      'username' => $this->username,
      'email' => $this->email,
      'role' => $this->whenPivotLoaded('role_user', function (){
          return $this->roles->name;
      })
      ];
   }

问题是当我想从数据透视表中访问角色信息时,角色消失了,我得到了这样的空白角色信息:

{
    "data": {
        "id": 1,
        "username": "john",
        "email": "john.doe@mail.com",
    }
}

有人可以帮我解决这个问题吗?
谢谢〜

2 个答案:

答案 0 :(得分:1)

$this->roles->name;更改为return $this->roles->name;

(不要感到羞耻,花了几分钟时间注意到它)

答案 1 :(得分:0)

尝试返回此资源的控制器功能:

$user = User::where('id', '=', $id)->with('roles')->first();

然后是return new UserResource($user);