【问题标题】:How do i use one to many relationship within Laravel 8 Middleware?我如何在 Laravel 8 中间件中使用一对多关系?
【发布时间】:2021-06-17 19:40:54
【问题描述】:

我的数据库中有一个UsersRoles 表。一个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')。你想做什么 ?用我给你的那行,你就得到了所有的用户角色。

标签: php laravel inertiajs


【解决方案1】:

在用户模式中使用这种关系方法:

public function userRoles()
{
    $this->hasMany('App\Models\role_table_modal_name','user_id');
}

然后在控制器/中间件中调用你的用户模式:

$ user_roles = User::find($id)->with('userRoles')->get();

【讨论】:

    猜你喜欢
    • 2021-03-01
    • 2015-10-26
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2022-01-22
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多