Wie kann ich einen Verstoß gegen die Integritätsbeschränkung gegen 'linked_product_id' beheben (beim Import)
-
16-10-2019 - |
Frage
Während des Imports bekomme ich Fehler wie
PHP Fatal error: Uncaught exception 'PDOException' with message
'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or
update a child row: a foreign key constraint fails
(`foo`.`catalog_product_link`, CONSTRAINT
`FK_CAT_PRD_LNK_LNKED_PRD_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY
(`linked_product_id`) REFERENCES `catalog_product_entity` (`entity_id`)'
in lib/Zend/Db/Statement/Pdo.php:228
Ich habe mich bereits geändert Mage_ImportExport_Model_Import_Entity_Product::_saveLinks()
zum Debuggen der einzelnen Einsätze:
if ($linkRows) {
foreach($linkRows as $row) {
$adapter->insertOnDuplicate(
$mainTable,
$row,
array('link_id')
);
}
Und jetzt bekomme ich linked_product_id' cannot be null'
Der volle Import stoppt aufgrund dieses Fehlers.
Lösung
Sie können einen Debug -Code in hinzufügen \Mage_ImportExport_Model_Import_Entity_Product::_saveLinks
um dieses Problem aufzuspüren und zu vermeiden, dass der volle Import stoppt:
if ((isset($this->_newSku[$linkedSku]) || isset($this->_oldSku[$linkedSku]))
&& $linkedSku != $sku) {
if (isset($this->_newSku[$linkedSku])) {
$linkedId = $this->_newSku[$linkedSku]['entity_id'];
} else {
$linkedId = $this->_oldSku[$linkedSku]['entity_id'];
}
$linkKey = "{$productId}-{$linkedId}-{$linkId}";
// [BEGIN CHANGE] - Comment: Debug
if ($linkedId == null) {
Mage::logException(
new Exception(
sprintf('Debug - WARNING: Orphaned link skipped: From SKU %s (ID %d) to SKU %s, Link type id: %d',
$sku, $productId, $linkedSku, $linkId)
)
);
continue;
}
// [END]
Dadurch protokolliert eine Ausnahme mit detaillierten Informationen zu den Produkten und Verknüpfungen, um die der Fehler geht.
In meinem Fall gab es Fehler mit den als verwandten Produkten bezeichneten Produkten. Diese Produkte wurden also während des Imports übersprungen und Magento erzeugte Links zu "Null".