升级到 Magento 2.2.2 后:键 'PRIMARY' 的重复条目“0-0-0-0”,查询为:INSERT INTO `salesrule_product_attribute` () VALUES ()

After Upgrade to Magento 2.2.2: Duplicate entry '0-0-0-0' for key 'PRIMARY', query was: 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 ()

如果我对运行所有销售规则表进行分类,它就可以工作,但我不能在生产环境中这样做。这个问题有解决办法吗?

问题出在文件 vendor/magento/module-sales-rule/Model/ResourceModel/Rule.php

如果 $data 为空,方法 setActualProductAttributes 插入空 VALUES()

这可以通过覆盖模型和替换来解决

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

与:

if(count($data > 0 )) {
    $connection->insertMultiple($this->getTable('salesrule_product_attribute'), $data);
}