我们有一个模块可以将产品导入magento。该模块由Magento程序员编写。它使用Magento API并用PHP编写。它读取类似CSV的文件(使用的实际分隔符为'#'),将一行转换为产品,然后将产品写回Magento。到目前为止,非常好。
我复制并更改了模块几次。最后一个变化是更新产品,而不是导入整个产品。该模块适用于大约950种这些产品,然后抛出异常:
magento:/srv/www/vhosts/www.mysite.com/shell # php import_colors.php ../var/import/colors.csv.out.csv
PHP Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '12804-176-1-563' for key 'PRIMARY'' in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php:234
Stack trace:
#0 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array)
#3 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ca...', Array)
#4 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(1537): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `ca...', Array)
#5 /srv/www/vhosts/www.mysite.com/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Indexer/Eav in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php on line 234
Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '12804-176-1-563' for key 'PRIMARY'' in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php:234
Stack trace:
#0 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array)
#3 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ca...', Array)
#4 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(1537): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `ca...', Array)
#5 /srv/www/vhosts/www.mysite.com/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Indexer/Eav in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php on line 234
我什么也没想。客户很高兴自己更换了最后50个左右的产品,错误信息被遗忘了。
然而,今天客户称他的产品属性索引不会构建,后台的索引仍然是橙色的“处理”。所以我调查并发现可以使用shell / indexer.php构建索引。所以我已经尝试了,并且看到了我几乎忘记的完全相同的错误信息。
我已经转储数据库并试图找出哪个表实际包含了错误消息(12804-176-1-563)中列出的数据,但我没有运气。似乎这四个日期无法按此顺序找到。
现在,有两个选项可供选择。一个是找出实际包含问题的表,以便可以使用Magento本身修复它。另一种方法可能是清除相应的索引表并从头开始重建索引。我不确定在数据库模式中挖掘我不完全理解是一个好主意。
有人可以帮我找出问题吗?
答案 0 :(得分:2)
请检查这不是一件简单的事情,例如数据库中的某些重复产品已被“中止”以留下没有SKU值的产品条目。
答案 1 :(得分:2)
我对自编的PHP导入脚本也有同样的问题。我仍然不确定如何解决这个问题,但我发现在12804-176-1-563中,12804指的是数据库中产品的ID。因此,如果您删除/重新创建或禁用该产品,那么索引器将正常工作将正常工作。 如果您有任何关于为什么有一些完整性约束违规的提示请分享! : - )