Обновление Laravel или создание отношений - PullRequest
0 голосов
/ 12 марта 2019

У меня есть модель Предмета, в которой есть ItemTranslations, я получаю Запрос с обновляемым Предметом и переводами для этого Предмета.

Теперь некоторые из этих переводов уже будут в базе данных.(у них есть свой идентификатор), и некоторые из них будут новыми.Есть ли чистый способ сделать это?

В псевдо: Обновите элемент с этим запросом, для каждого перевода, который вы найдете в этом запросе, обновите отношение перевода, если оно существует, иначе создайте его дляthis Item.

Это макет моего Item.

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');
    }
}

Это перевод Item

class ItemTranslation extends Model
{
    protected $table = 'item_translations';
    protected $fillable = ['menu_item_id', 'locale', 'name', 'order', 'description', 'link', 'is_online'];
}

1 Ответ

2 голосов
/ 12 марта 2019

Вы можете использовать метод updateOrCreate в отношении translations().Например, $item->translations()->updateOrCreate(['name' => $translation['name'], ], [ < the rest of the translation's data> ]); Обратите внимание, что первым аргументом метода updateOrCreate должны быть данные, по которым вы хотите найти перевод, т. Е. Данные, которые остались бы прежними.Вторым аргументом должны быть данные, которые могут быть обновлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...