【问题标题】:Magento: Rebuilding Index after self-written product import/update throws exceptionMagento:自写产品导入/更新后重建索引引发异常
【发布时间】:2011-05-10 13:07:10
【问题描述】:

我们有一个模块可以将产品导入 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) 中列出的数据,但我没有运气。好像这4个日期按这个顺序都找不到了。

现在,关于如何继续,有两种选择。一种是找出哪个表实际包含问题,以便可以使用 Magento 本身修复它。另一种方法可能是清除相应的索引表并从头开始重建索引。我不确定在我不完全理解的数据库架构中进行挖掘是个好主意。

谁能帮我找出问题所在?

【问题讨论】:

  • 你能帮我吗?如何记录完整查询?通过 MySQL,还是有办法使用 Magento 本身?

标签: php mysql magento


【解决方案1】:

请检查这不是简单的事情,例如数据库中的某些重复产品已被“中止”以留下没有 SKU 值的产品条目。

【讨论】:

  • 这是一种解决方案。我不知道为什么有重复的条目。我手动删除了条目,索引再次正确构建。
【解决方案2】:

我对自己编写的 PHP 导入脚本也有同样的问题。我仍然不确定如何解决这个问题,但我发现在 12804-176-1-563 中,12804 是指数据库中产品的 id。因此,如果您删除/重新创建或禁用该产品,那么索引器将正常工作。 如果您对为什么存在一些违反完整性约束的行为有任何提示,请分享! :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多