为了账号安全,请及时绑定邮箱和手机立即绑定

保存 belongsTo 关系

保存 belongsTo 关系

PHP
largeQ 2022-05-27 16:47:57
我有一个经典的一对多关系,我正在尝试保存 belongsTo 端的模型。这 2 个模型具有以下关系:// Model myModelfunction domicile(){    return $this->belongsTo('App\Address', 'domicile_id');}// Model Addressfunction myModels(){    return $this->hasMany('App\MyModel', 'domicile_id');}这就是我试图保存它的方法:$myModel->domicile()->save($my_array);使用此代码,我得到错误:调用未定义的方法 Illuminate\Database\Eloquent\Relations\BelongsTo::save()如果我使用此代码(不带括号):$myModel->domicile->save($my_array);我没有收到任何错误,但模型没有保存。我知道有方法associate,但我需要更新现有记录,而不是保存新记录。
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

因为$myModel->domicile()->save($my_array);完全不同$myModel->domicile->save($my_array);

  1. $myModel->domicile()将产生一个BelongsTo对象,不支持save因为saveHasMany实例的方法,而不是BelongsTo你应该使用的实例associate(YourModel)

  2. $myModel->domicile将产生一个Model支持该save(array)方法的关联元素的对象,但该数组是一个options数组,正如 api 所说https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Model.html#method_save

所以换句话说,如果你有一个(地址)对多(住所)的关系,如果你想与地址关联一个或多个住所,你必须使用savesaveManyhttps://laravel.com/api/5.7 /Illuminate/Database/Eloquent/Relations/HasMany.html#method_save),如果您想将地址关联到住所,您应该使用associatehttps://laravel.com/api/5.7/Illuminate/Database/Eloquent/ Relations/BelongsTo.html#method_associate )...请记住,如果要执行此操作,则应使用括号调用属性,以便返回HasMany对象或BelongsTo对象,而不是模型或集合(如果你调用不带括号的属性,你会得到)


查看完整回答
反对 回复 2022-05-27
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

save为了保存belongsTo关系而不是使用该函数,您必须使用该fill函数。


这样:


$myModel->domicile->fill($my_array);

$myModel->domicile->save();


查看完整回答
反对 回复 2022-05-27
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

您必须使用associate()+save()来存储 BelongsTo 关系:


$myModel->domicile()->associate($domicile);

$myModel->save();


查看完整回答
反对 回复 2022-05-27
  • 3 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信