Как я могу исправить нарушение ограничения целостности для «linked_product_id» (при импорте)

magento.stackexchange https://magento.stackexchange.com/questions/6036

Вопрос

Во время импорта я получаю такие ошибки, как

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 2 PullRequest

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top