【发布时间】:2021-06-17 19:40:54
【问题描述】:
我的数据库中有一个Users 和Roles 表。一个user 可以有多个roles。我正在使用 Laravel 8,我希望能够在中间件中为 user 返回所有 roles(我使用的是惯性.js - handleinertiarequest.php)。
角色表:
| id | role | user_id |
|---|---|---|
| 1 | super_admin | 3 |
| 2 | admin | 3 |
| 3 | user | 3 |
用户表:
| id | name |
|---|---|
| 1 | Some name |
| 2 | Some other name |
| 3 | Joe Bloggs |
用户模型(User.php):
public function userroles()
{
return $this->hasMany(Roles::class);
}
角色模型 (Roles.php):
public function user()
{
return $this->belongsTo(User::class);
}
HandleInertiaRequest.php:
public function share(Request $request)
{
return array_merge(parent::share($request), [
'auth' => function () use ($request) {
return [
'user' => $request->user() ? [
'id' => $request->user()->reference,
'first_name' => $request->user()->first_name,
'last_name' => $request->user()->last_name,
'role_staff' => \App\Models\Roles::select('id'),
] : null,
];
},
]);
}
Layout.vue:
{{ $page.props.auth.user.role_staff }}
因此,如果我以Joe Bloggs (id = 3) 登录,我希望它返回3 roles(如果使用id,甚至只返回1)。但这不会返回任何内容或显示任何错误。我在这里想念什么?谢谢
【问题讨论】:
-
要使用
userroles()关系获取当前用户角色,请执行$request->user()->userroles。我建议您将方法名称更改为roles() -
感谢@N69S,我得到了错误:'where 子句'中的未知列'roles.deleted_at'。我只是选择了 id,所以不知道为什么它要求 delete_at。 return $this->belongsTo(User::class,'id')->select('id');这与使用 SoftDeletes 有关吗?任何想法如何解决这个问题?
-
从关系中删除
select('id')。你想做什么 ?用我给你的那行,你就得到了所有的用户角色。