【发布时间】:2021-05-02 18:43:06
【问题描述】:
我有一个具有用户和角色模型的应用程序以及它们之间的一对一关系。如何检查用户是否具有角色。我收到 SQLSTATE[42S22] 错误。
SQLSTATE[42S22]:找不到列:1054 'where 子句'中的未知列'roles.user_id'(SQL:select * from
roleswhereroles.user_id= 1 和roles.@ 987654326@ 不为空且name= 客户端限制 1)
- 数据库结构
Users
---------------
* id
* name
* email
* password
* role_id
* created_at
Roles
---------------
* id
* name
* slug
* created_at
- 应用/模型/用户
public function role()
{
return $this->hasOne(Role::class);
}
public function hasRole(string $role)
{
if ($this->role()->where('name', $role)->first()) {
return true;
}
return false;
}
- 应用/模型/角色
public function users()
{
return $this->belongsTo(User::class);
}
【问题讨论】:
-
该错误通知您尚未在
roles表中定义user_id列,该列将存储id的id。你需要先定义它。 -
正确吗?一个用户有 1 个角色,一个角色有 1 个用户?如果是正确的,你需要一个名为角色的表吗?或者一个角色可以有很多用户?在这种情况下,role_id 应该在用户表中。
-
@Unflux 实际上,我在 users 表上有一个 role_id,它是一个外部 id。但话又说回来,我无法在
hasRole公共函数中调用role()关系。 -
@FelippeDuarte 我已经在 users 表中有该列,只是我无法在公共函数
hasRole中调用模型中定义的role()关系。跨度>
标签: php laravel eloquent laravel-8