У меня есть модель элемента с 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');
}
}
Это перевод товара
class ItemTranslation extends Model
{
protected $table = 'item_translations';
protected $fillable = ['menu_item_id', 'locale', 'name', 'order', 'description', 'link', 'is_online'];
}






Вы можете использовать метод updateOrCreate для отношения translations(). Например:
$item->translations()->updateOrCreate([
'name' => $translation['name'],
// Fields that should be used to find an existing record.
], [
'description' => "New description",
// Fields that should be updated.
]);
Аргумент первый — это данные, которые вы хотите, чтобы Eloquent преобразовал в Погляди, translation by, а аргумент второй — это данные, которые вы хотите преобразовать в обновлен.
Аргументы Обе будут использоваться для Создайте нового translation, когда существующий не может быть найден.
Есть метод createMany (laravel.com/docs/5.7/eloquent-relationships#the-create-method), но не похоже, что есть что-то похожее на метод updateOrCreateMany.
@DelenaMalan Может быть, вы ищете что-то вроде gist.github.com/tonila/26f6a82c4dbe63d93b22ac67eaee2d6d
Я полагаю, это должно идти в цикле foreach? перебирать переводы, которые я получаю с запросом? Спасибо.