Laravel 有口才的关系

Laravel 有口才的关系,laravel,Laravel,我不明白这些关系是如何与雄辩的人合作的。想象一个用户有一个角色。我在我的模型用户中写道: public function role() { return $this->hasOne('App\Models\Role'); } 这就是我的榜样角色: public function user() { return $this->belongsTo('App\User'); } 之后,我希望检索已连接用户的角色,如下所示: Auth::user()->role-&

我不明白这些关系是如何与雄辩的人合作的。想象一个用户有一个角色。我在我的模型用户中写道:

public function role()
{
    return $this->hasOne('App\Models\Role');
}
这就是我的榜样角色:

public function user()
{
    return $this->belongsTo('App\User');
}
之后,我希望检索已连接用户的角色,如下所示:

Auth::user()->role->role_name
但它抛出了一个例外:

Undefined column: 7 ERROR: column roles.user_id does not exist

它不是这样工作的吗?

您在角色表中缺少了
用户id
外来列,Eloquent假设该列存在,以便将
用户
角色

Schema::create('roles',函数(Blueprint$表){
$table->bigIncrements('id');
$table->string('role_name');
$table->unsignedbiginger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
更新:给定一个hasOne关系
App\User
model

公共功能角色()
{
返回$this->hasOne('App\Models\Role');
}
App\Model\Role
Model

公共函数用户()
{
返回$this->belongsTo('App\User');
}
DatabaseSeeder

$user=factory('App\user')->create();
$user->role()->创建([
'角色名称'=>'管理员'
]);
routes/web

使用light\Support\Facades\Auth;
路由::get(“/”,函数(){
返回Auth::user()->role->role\u name;
});

结果
=>管理

您应该在用户模型中为角色关系使用
belongsTo()
关系:

public function role()
{
    return $this->belongsTo('App\Models\Role');
}

你能为角色表显示迁移文件吗?这取决于你是如何完成迁移的,但是根据你建立关系的方式,Eloquent会在角色表中查找用户的id。我认为用户属于一个角色并且一个角色有多个用户更合理。我颠倒了这两个概念“hasOne”和“belongsTo”。我更正了我的代码,现在它运行良好。现在我明白了。Merci@CaddyDZ不,OP正在做inverse@porloscerrosψ你确定吗?我仔细检查了一遍,结果是
我在我的模型用户:public function role()
@CaddyDZ中写的,他使用的是hasOne,而不是belongsToHi all。谢谢波洛塞罗斯。我颠倒了这两个概念“hasOne”和“belongsTo”。我更正了我的代码,现在它运行良好。现在我明白了。拉威尔的关系是双向的。在一对一关系中,可以定义直接关系(HasOne)和反向关系(BelongsTo)。有时会让人困惑,但我认为用户不是“有一个”角色,而是“属于”一个角色。我假设一个角色将由多个用户使用,这就是我自己的做法。