Laravel更新或创建关系

时间:2019-03-12 08:49:09

标签: php laravel eloquent

我有一个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'];
}

1 个答案:

答案 0 :(得分:1)

您可以在translations()关系上使用updateOrCreate方法。例如,$item->translations()->updateOrCreate(['name' => $translation['name'], ], [ < the rest of the translation's data> ]);请注意,updateOrCreate方法的第一个参数应该是您要用来查找转换的数据,即保持不变的数据。第二个参数应该是可以更新的数据。