我必须使用SQL表:users
和roles
;用户表由id (PRIMARY)
,email
,password
和role_id (INDEX)
列组成。角色表包含id (PRIMARY)
和name
列。用户只能拥有一个角色(管理员或用户)。
这就是我的laravel模型的样子:
// User Model
public function role()
{
return $this->hasOne(Role::class);
}
// Role model
public function user()
{
return $this->belongsTo(User::class);
}
我想要的是,当我获得用户的信息时,我想获得该用户的相应角色。
当我将此代码放在Artisan Tinker中时:
// Get user with id=2
App\User::find(2)->role;
这似乎符合我"Find the role belonging to the user with id 2"
但它抛出了这个错误:
Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'roles.user_id' in 'where clause' (SQL: select * from `roles` where `roles`.`user_id` = 2 and `roles`.`user_id` is not null limit 1)'
如何在不从角色模型调用用户的情况下获得用户的角色?
答案 0 :(得分:1)
由于您在role_id
表上有users
,因此belongsTo(Role::class)
模型上应该User
:
// User Model
public function role()
{
return $this->belongsTo(Role::class);
}
hasMany(User::class)
关于角色模型:
// Role model
public function users()
{
return $this->hasMany(User::class);
}
答案 1 :(得分:0)
我相信应该有belongsToMany而不是belongsTo。这应该可以解决问题。文档:https://laravel.com/docs/5.6/eloquent-relationships
答案 2 :(得分:0)
未知列'roles.user_id'
这是错误。您的角色表应包含log.dirs=/var/lib/kafka/data
列。