从外键的 laravel 关系中获取数据
Getting data from laravel relation on Foreign Key
我必须 SQL tables: users
和 roles
;用户 table 由 id (PRIMARY)
、email
、password
和 role_id (INDEX)
列组成。角色 table 由一个 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)'
如何在不从角色模型调用的情况下获取用户的角色?
我认为应该有 belongsToMany 而不是 belongsTo。这应该可以解决问题。文档:https://laravel.com/docs/5.6/eloquent-relationships
Unknown column 'roles.user_id'
这是错误。您的角色 table 应该有 user_id
列。
既然你在 users
table 上有一个 role_id
,你应该在 User
模型上有 belongsTo(Role::class)
:
// User Model
public function role()
{
return $this->belongsTo(Role::class);
}
和hasMany(User::class)
榜样:
// Role model
public function users()
{
return $this->hasMany(User::class);
}
我必须 SQL tables: users
和 roles
;用户 table 由 id (PRIMARY)
、email
、password
和 role_id (INDEX)
列组成。角色 table 由一个 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)'
如何在不从角色模型调用的情况下获取用户的角色?
我认为应该有 belongsToMany 而不是 belongsTo。这应该可以解决问题。文档:https://laravel.com/docs/5.6/eloquent-relationships
Unknown column 'roles.user_id'
这是错误。您的角色 table 应该有 user_id
列。
既然你在 users
table 上有一个 role_id
,你应该在 User
模型上有 belongsTo(Role::class)
:
// User Model
public function role()
{
return $this->belongsTo(Role::class);
}
和hasMany(User::class)
榜样:
// Role model
public function users()
{
return $this->hasMany(User::class);
}