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

时间:2018-04-18 19:16:34

标签: php laravel foreign-keys entity-relationship artisan

我必须使用SQL表:usersroles;用户表由id (PRIMARY)emailpasswordrole_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)'

如何在不从角色模型调用用户的情况下获得用户的角色?

3 个答案:

答案 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列。