Вставка или обновление записей в laravel

30 Января 2016

Laravel – великолепный, хорошо документированный фреймворк, однако некоторые вещи даже в нем приходиться находить опытным путем. В частности, нередко встает задача добавлять данные, при этом проверяя, существовала ли подобная запись до этого момента или нет. Стоит честно сказать, что особенной сложности данная задача, конечно же, не представляет. Однако там, по каким-то неведомым причинам метод, который можно использовать для решения подобной задачи никак не документируется.

Что ж, давайте повнимательнее посмотрим на код функции:

/**
   * Create or update a record matching the attributes, and fill it with values.
   *
   * @param array $attributes
   * @param array $values
   * @return static
   */
  public static function updateOrCreate(array $attributes, array $values = [])
  {
    $instance = static::firstOrNew($attributes);

    $instance->fill($values)->save();

    return $instance;
  }

В качестве входных параметров используется массив с атрибутами соответствий и массив с данными для записи. Предположим, у нас имеется таблица соответствий между продуктами и категориями( категорий может быть несколько).

пример таблицы

пример таблицы

Если нам нужно обновить записи с учетом совпадения обоих значений можно написать следующее:

productCategories::updateOrCreate(['product_id' => $product_id, 
          'category_id' => $category_id], 
                 $data);

Разумеется, никто не мешает указывать нам только один элемент в массиве $attributes, к примеру, id какой-либо сущности.

На этом пока все, изучайте Laravel и делайте крутые проекты.

3
Комментарии
Павел
15.03.2016 в 10:20
Короче, я протрезвел, и это все хуйня. Делать сайты стоит только на WordPress'е!
Павел в ответ на комментарий
20.03.2016 в 08:48
Сказал посетитель сайта и пошел пить дальше)
Павел в ответ на комментарий
25.04.2016 в 08:32
Ах ты ж пёс!

Для того, чтобы выразить экспертное мнение, нужно авторизироваться