Question

Qu'est-ce que je dois faire si l'index des attributs du produit donne une erreur comme ceci:

Next exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '12692-214-1-11745' for key 'PRIMARY'' in /home/uitlaat/domains/uitlaatcity.nl/public_html/lib/Zend/Db/Statement/Pdo.php:234
Stack trace:
#0 /home/uitlaat/domains/uitlaatcity.nl/public_html/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#1 /home/uitlaat/domains/uitlaatcity.nl/public_html/lib/Zend/Db/Statement.php(300): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#2 /home/uitlaat/domains/uitlaatcity.nl/public_html/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#3 /home/uitlaat/domains/uitlaatcity.nl/public_html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array)
#4 /home/uitlaat/domains/uitlaatcity.nl/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(419): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ca...', Array)
#5 /home/uitlaat/domains/uitlaatcity.nl/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(1974): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `ca...', Array)
#6 /home/uitlaat/domains/uitlaatcity.nl/public_html/app/code/core/Mage/Catalog/Model/Resource/Product/Indexer/Eav/Source.php(276): Varien_Db_Adapter_Pdo_Mysql->insertArray('catalog_product...', Array, Array)
#7 /home/uitlaat/domains/uitlaatcity.nl/public_html/app/code/core/Mage/Catalog/Model/Resource/Product/Indexer/Eav/Source.php(257): Mage_Catalog_Model_Resource_Product_Indexer_Eav_Source->_saveIndexData(Array)
#8 /home/uitlaat/domains/uitlaatcity.nl/public_html/app/code/core/Mage/Catalog/Model/Resource/Product/Indexer/Eav/Source.php(84): Mage_Catalog_Model_Resource_Product_Indexer_Eav_Source->_prepareMultiselectIndex(NULL, NULL)
#9 /home/uitlaat/domains/uitlaatcity.nl/public_html/app/code/core/Mage/Catalog/Model/Resource/Product/Indexer/Eav/Abstract.php(50): Mage_Catalog_Model_Resource_Product_Indexer_Eav_Source->_prepareIndex()
#10 /home/uitlaat/domains/uitlaatcity.nl/public_html/app/code/core/Mage/Catalog/Model/Resource/Product/Indexer/Eav.php(185): Mage_Catalog_Model_Resource_Product_Indexer_Eav_Abstract->reindexAll()
#11 /home/uitlaat/domains/uitlaatcity.nl/public_html/app/code/core/Mage/Index/Model/Indexer/Abstract.php(143): Mage_Catalog_Model_Resource_Product_Indexer_Eav->reindexAll()
#12 /home/uitlaat/domains/uitlaatcity.nl/public_html/app/code/core/Mage/Index/Model/Process.php(209): Mage_Index_Model_Indexer_Abstract->reindexAll()
#13 /home/uitlaat/domains/uitlaatcity.nl/public_html/app/code/core/Mage/Index/Model/Process.php(255): Mage_Index_Model_Process->reindexAll()
#14 /home/uitlaat/domains/uitlaatcity.nl/public_html/shell/indexer.php(158): Mage_Index_Model_Process->reindexEverything()
#15 /home/uitlaat/domains/uitlaatcity.nl/public_html/shell/indexer.php(198): Mage_Shell_Compiler->run()
#16 {main}

Qui a des solutions, peut-être me aide si je tronque quelques tables.

Était-ce utile?

La solution

Je déboguée étape par étape et a trouvé la raison exacte de la trace donnée ci-dessus. J'ai script personnalisé pour l'importation de produits à Magento, et tout en créant de nouveaux produits, le script d'attributs attribue une valeur MultiSelect au produit. Certains des produits ont une id option deux ou plusieurs fois et pendant l'indexation ce sera cause de quelques bugs comme « violation de contrainte d'intégrité ». Si je décris ce par code:

$_product->setSomeMultiselectAttribute(array(option_id_1, option_id_2, option_id_1));
$_product->save();

Après l'importation terminée, je indexation, et exception donnée sera apparais ci-dessus. Cest comme je fixe mon bug:

$_product->setSomeMultiselectAttribute(array_unique(array(option_id_1, option_id_2, option_id_1)));

Peut-être que quelqu'un va de l'aide à l'avenir. Et exception a disparu.

Autres conseils

Dans la plupart des cas, cela est lié aux tables flat_catalog ayant un problème avec une clé étant insérée qui est déjà dans la base de données à savoir une contrainte de clé primaire. Tronquer leur est en effet une bonne option, les touches seront effacées et vous pouvez les réindexer après.

mysql: (garder à l'esprit que vos tables plats peuvent avoir des noms différents)

TRUNCATE TABLE `catalog_category_flat_store_1`;

Alors réindexer de adminpanel ou via le terminal d'exécuter le script shell réindexation du répertoire racine Magento comme suit:

php shell/indexer.php --reindex catalog_product_flat 
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top