首页 > 解决方案 > 如果列为真,则检查关系,Laravel

问题描述

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

在用户中,我有 role_id,我想检查该角色是否有一个列“access_admin_area”为真。如果为真,我正在使用中间件。

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 错误:列角色.user_id 不存在↵LINE 1:从“角色”中选择 *,其中“角色”。“用户 ID”= $1 和“角色..

标签: laraveleloquentlaravel-7

解决方案


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

如果我是你,我宁愿在这个用例中使用你的用户和角色模型之间的 hasMany 关系,因为我希望你的用户和角色应该有一个多对多的关系

查看 laravel 文档中的多对多关系 eloquent 和数据库结构https://laravel.com/docs/7.x/eloquent-relationships#many-to-many


推荐阅读