我不明白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
不是那样吗?
答案 0 :(得分:2)
您在角色表中缺少user_id
外部列,Eloquent假定该列存在以将User
与Role
链接
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();
});
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');
}