Обновление Laravel или создание отношений

У меня есть модель элемента с 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'];
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
0
10 844
1

Ответы 1

Вы можете использовать метод 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, когда существующий не может быть найден.

Я полагаю, это должно идти в цикле foreach? перебирать переводы, которые я получаю с запросом? Спасибо.

Miguel Stevens 12.03.2019 10:12

Есть метод createMany (laravel.com/docs/5.7/eloquent-relationships#the-create-method), но не похоже, что есть что-то похожее на метод updateOrCreateMany.

D Malan 12.03.2019 10:15

@DelenaMalan Может быть, вы ищете что-то вроде gist.github.com/tonila/26f6a82c4dbe63d93b22ac67eaee2d6d

Prafulla Kumar Sahu 12.03.2019 11:27

Другие вопросы по теме