我目前正在使用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",
}
}
有人可以帮我解决这个问题吗?
谢谢〜
答案 0 :(得分:1)
将$this->roles->name;
更改为return $this->roles->name;
(不要感到羞耻,花了几分钟时间注意到它)
答案 1 :(得分:0)
尝试返回此资源的控制器功能:
$user = User::where('id', '=', $id)->with('roles')->first();
然后是return new UserResource($user);