从外键的 laravel 关系中获取数据

Getting data from laravel relation on Foreign Key

我必须 SQL tables: usersroles;用户 table 由 id (PRIMARY)emailpasswordrole_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);
}