После обновления до Magento 2.2.2: повторяющаяся запись «0-0-0-0» для ключа «PRIMARY», запрос был: INSERT INTO `salesrule_product_attribute` () VALUES ()

Если я обновлю Magento с 2.1.8 до 2.2.2 и запущу setup:upgrade, я получу следующую ошибку:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0-0-0-0' for key 'PRIMARY', query was: INSERT INTO `salesrule_product_attribute` () VALUES ()

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


person bpoiss    schedule 18.01.2018    source источник


Ответы (1)


Проблема в файле vendor/magento/module-sales-rule/Model/ResourceModel/Rule.php.

Метод setActualProductAttributes вставляет пустой VALUES(), если $data пуст.

Это можно исправить, переопределив модель и заменив

$connection->insertMultiple($this->getTable('salesrule_product_attribute'), $data);

с:

if(count($data > 0 )) {
    $connection->insertMultiple($this->getTable('salesrule_product_attribute'), $data);
}
person bpoiss    schedule 18.01.2018
comment
Невозможно применить патч данных... Параметр должен быть массивом или объектом, который реализует Countable... Просто удаление этой строки, а не if - похоже, сработало - person Jon; 24.09.2020