我有一个Item模型,该模型具有ItemTranslations,我收到一个我要更新的商品的请求以及该商品的翻译。
现在,其中一些翻译将已经在数据库中(它们具有自己的ID),而其中一些则是新的。有一个干净的方法可以解决这个问题吗?
以伪方式:使用此请求更新商品,对于在此请求中找到的每个翻译,更新翻译关系(如果存在),否则为该商品创建翻译关系。
这是我的物品的布局。
class Item extends Model
{
protected $fillable = ['menu_id', 'parent_id', 'title', 'order', 'resource_link', 'html_class', 'is_blank'];
public function translations()
{
return $this->hasMany(MenuItemTranslation::class, 'menu_item_id');
}
}
这是ItemTranslation
class ItemTranslation extends Model
{
protected $table = 'item_translations';
protected $fillable = ['menu_item_id', 'locale', 'name', 'order', 'description', 'link', 'is_online'];
}
答案 0 :(得分:1)
您可以在translations()
关系上使用updateOrCreate
方法。例如,$item->translations()->updateOrCreate(['name' => $translation['name'], ], [ < the rest of the translation's data> ]);
请注意,updateOrCreate
方法的第一个参数应该是您要用来查找转换的数据,即保持不变的数据。第二个参数应该是可以更新的数据。