Laravel updateOrCreate - 1062 Duplicate entry

237
12 января 2019, 00:00

Есть такая таблица:

Schema::create('open_orders', function (Blueprint $table) {
            $table->uuid('orderID');
            $table->primary('orderID');
            ...
            $table->string('transactTime');
            $table->timestamps();
        });

Периодически нужно синхронить в нее данные использую updateOrCreate:

$active_orders = $this->api->getOpenOrders();
        foreach ($active_orders as $order)
        {
            Orders::updateOrCreate([
                'orderID' => $order['orderID'],
                ...                   
                'transactTime' => $order['transactTime']
            ]);
        }

Итого, первый раз запись создается, а со второго:

Integrity constraint violation: 1062 Duplicate entry '0b357043-4699-83d8-7118-c5a369b3ef75' for key 'PRIMARY'...

Подскажите, что я делаю не так, ведь после первой вставки, если запись существует то ее должно просто обновлять...

Answer 1

В документации же написано всё:

If the model can not be found in the database, a record will be inserted with the attributes from the first parameter, along with those in the optional second parameter.

Так же это написано в API:

Create or update a record matching the attributes, and fill it with values.

В вашем случае нужно orderID только оставлять в первом параметре, остальные выносить во второй параметр:

Orders::updateOrCreate(['orderID' => $order['orderID']],
[
   ...                   
   'transactTime' => $order['transactTime']
]);

В таком случае будет поиск только по orderID и метод будет работать правильно.

Answer 2

Скорее всего PRIMARY ключ не меняется, но и из-за того что меняется хоть одно поле в массиве у updateOrCreate, функция пытается создать новую запись, а PRIMARY ключ повторяется.

Понять как работает метод изнутри помогут две ссылки:

https://github.com/laravel/framework/blob/5.7/src/Illuminate/Database/Eloquent/Builder.php#L428 https://github.com/laravel/framework/blob/5.7/src/Illuminate/Database/Eloquent/Builder.php#L394

READ ALSO
Не выводится страница ошибки Yii2

Не выводится страница ошибки Yii2

Пишу сайт на yii2В конфиге имею такую настройку

152
Перевод строки в формулу php

Перевод строки в формулу php

Пользователь вводит произвольную формулу, которая сохраняется в БДВ формуле есть подстановки значений из последующих форм, к примеру:

195
MySQL Одинаковый запрос в разные таблицы

MySQL Одинаковый запрос в разные таблицы

Сейчас есть 2 таблицы, которых в дальнейшем будет 13Каждая таблица абсолютно идентична по структуре, каждая проиндексирована по нужным параметрам...

170
Yii 2 проблема с поддоменом .htaccess

Yii 2 проблема с поддоменом .htaccess

Всем привет, начал проект на yii 2, теперь хочу его разместить на поддомене, только не получается никак правильно настроитьhtaccess Сейчас нормально...

171