在关系中检查列是否为真,Laravel

我有2个表格:角色和用户。

在用户中,我具有role_id,并且我想检查该角色的true上是否包含一列“ access_admin_area”。如果为true,则表示我在使用中间件。

Gate::define('admin', function ($user) {
   return !empty($user->roles()->where('access_admin_area', true)->first());
});

从用户模型:

public function roles()
{
    return $this->hasOne(Role::class);
}
SQLSTATE [42703]:未定义的列:7错误:列role.user_id不存在↵LINE1:从“ roles”中选择*,其中“ roles”。“ user_id” = $ 1和“ role ..
评论
  • kodit
    kodit 回复

    该错误在这里很好地描述了该问题-用户模型中的hasOne关系方法希望角色表行具有一个user_id列,该列指定一个引用用户表id列的外键。

    如果我是您,则宁愿在此用例中在用户和角色模型之间使用hasMany关系,因为我希望您的用户和角色应具有多对多关系

    check out the many-to-many relationship eloquent and database structure in the laravel documentation https://laravel.com/docs/7.x/eloquent-relationships#many-to-many