Associate() in laravel



我有 2 个模型,一个用户和一个地址。自从我在 https://laravel.com/docs/5.6/eloquent-relationships#updating-belongs-to-relationships 年阅读它以来,我仍在对 associate(( 进行实验,但我在实现它时遇到了一些麻烦,遗憾的是我的视频教程没有涵盖 associate(( 函数。

class User extends Authenticatable
      public function address() {
      return $this->hasOne('AppAddress');
}
class Address extends Model
      public function user() {
      return $this->belongsTo('AppUser');
}
// --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);
});

一切都被保存了,但我预计地址的user_id将是 1。相反,user_id地址设置为 NULL。associate(( 不是应该通过自动分配与父模型相同的外键来将特定的"belongsTo"模型链接到其父模型吗?顺便说一句,我对PHP和Laravel非常陌生,所以是的。

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

正如文档所说:

属于关系

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

$account = AppAccount::find(10);
$user->account()->associate($account);
$user->save();

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

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

您需要保存它:

$address->save();

您的地址模型需要具有属于用户关系。例如:

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

注意:您需要确保具有外键约束

例如迁移:

Schema::table('addresses', function (Blueprint $table) {
    $table->unsignedInteger('user_id');
    $table->foreign('user_id')->references('id')->on('users');
});

相关内容

  • 没有找到相关文章

最新更新