Laravel 中的 Associate()

Jp *_*lla 3 php associate laravel eloquent

我有 2 个模型,一个用户和一个地址。我仍在尝试 Associate() ,因为我在https://laravel.com/docs/5.6/eloquent-relationships#updating-belongs-to-relationships中读到它,但我在实现它时遇到了一些麻烦,遗憾的是我的视频教程不涉及 Associate() 函数。

class User extends Authenticatable
      public function address() {
      return $this->hasOne('App\Address');
}

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

// --web.php--

Route::get('/sample',function(){
$user = User::create(['name'=>'user 1','email'=>'user@laravel.com',password='']);
$address = Address::create(['name'=>'sample address of user 1']);

$address->user()->associate($user);

});
Run Code Online (Sandbox Code Playgroud)

一切都已保存,但我预计该地址的 user_id 将为 1。相反,该地址的 user_id 被设置为 NULL。Associate() 不是应该通过自动分配等于父级 ID 的外键来将特定的“belongsTo”模型链接到其父级吗?顺便说一句,我对 PHP 和 Laravel 很陌生,所以是的..

Ken*_*rna 5

您仍然需要save对象来存储值。

正如文档所说:

属于关系

更新belongsTo关系时,可以使用associate方法。此方法将在子模型上设置外键:

$account = App\Account::find(10);

$user->account()->associate($account);

$user->save();
Run Code Online (Sandbox Code Playgroud)

因此,如您所见,关联后:

$address->user()->associate($user);
Run Code Online (Sandbox Code Playgroud)

你需要保存它:

$address->save();
Run Code Online (Sandbox Code Playgroud)