我有两个模型,一个用户和一个地址。我仍然在试验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);
});所有内容都被保存了,但是我原以为地址的user_id应该是1,但是地址的user_id却被设置为NULL。associate()不是应该通过自动分配等于父模型ID的外键来将特定的“belongsTo”模型链接到其父模型吗?顺便说一句,我是PHP和Laravel的新手,所以是的..
发布于 2018-04-09 12:30:30
您仍然需要对对象执行save操作来存储值。
正如documentation所说:
属于关系
在更新关联关系时,您可以使用belongsTo方法。此方法将在子模型上设置外键:
$account = App\Account::find(10);$user->account()->associate($account);$user->save();
因此,正如您所看到的,完成此操作后:
$address->user()->associate($user);您需要这样做:
$address->save();发布于 2018-04-09 11:16:30
您的地址模型需要具有belongsTo用户关系。例如:
class Address extends Model
public function user() {
return $this->belongsTo('App\User');
}
}注意:您需要确保具有外键约束
例如迁移:
Schema::table('addresses', function (Blueprint $table) {
$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});https://stackoverflow.com/questions/49724941
复制相似问题