RelationShip雄辩的hasOne

时间:2019-09-11 15:18:28

标签: laravel

我不明白RelationShips如何与Eloquent一起使用。想象一个用户只有一个角色。我在模型用户中写了这个:

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

不是那样吗?

2 个答案:

答案 0 :(得分:2)

您在角色表中缺少user_id外部列,Eloquent假定该列存在以将UserRole链接

Schema::create('roles', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('role_name');
    $table->unsignedBigInteger('user_id');
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->timestamps();
});

更新:给定hasOne关系

App\User模型

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

App\Model\Role模型

public function user()
{
   return $this->belongsTo('App\User');
}

DatabaseSeeder

$user = factory('App\User')->create();
$user->role()->create([
   'role_name' => 'Admin'
]);

routes/web

use Illuminate\Support\Facades\Auth;

Route::get('/', function () {
    return Auth::user()->role->role_name;
});

Results => 管理员

答案 1 :(得分:1)

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

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