Как я могу исправить нарушение ограничения целостности для «linked_product_id» (при импорте)
-
16-10-2019 - |
Вопрос
Во время импорта я получаю такие ошибки, как
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
я уже поменял Mage_ImportExport_Model_Import_Entity_Product::_saveLinks()
для отладки одиночных вставок:
if ($linkRows) {
foreach($linkRows as $row) {
$adapter->insertOnDuplicate(
$mainTable,
$row,
array('link_id')
);
}
И теперь я получаю linked_product_id' cannot be null'
Полный импорт останавливается из-за этой ошибки.
Решение
Вы можете добавить некоторый отладочный код в \Mage_ImportExport_Model_Import_Entity_Product::_saveLinks
чтобы отследить эту проблему и избежать полной остановки импорта:
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]
При этом будет зарегистрировано исключение с подробной информацией о продуктах и ссылках, по которым возникла ошибка.
В моем случае были ошибки с продуктами, указанными как сопутствующие.Таким образом, эти продукты были пропущены во время импорта, а Magento сгенерировал ссылки на «null».
Не связан с magento.stackexchange