Когда строки в суперлинке продукта каталога не обновляются при удалении продукта?


Я обнаружил странное поведение в том, как Magento (EE 1.12) ведет хозяйство в таблице catalog_product_super_link. Когда связанный простой продукт удаляется без предварительного разъединения, запись, соответствующая этой ссылке, остается. Кроме того, при повторном сохранении несвязанного настраиваемого продукта потерянные строки остаются.

Чтобы повторить это, пожалуйста, попробуйте

  1. Создайте тестируемый настраиваемый продукт и простой продукт

  2. Ассоциировать два.

  3. Удалите простой продукт, не отсоединяясь.

  4. Проверьте таблицу БД с помощью следующего запроса.

    select l.*, p.sku
    from catalog_product_super_link as l
        left join catalog_product_entity as p
            on l.product_id = p.entity_id
    where l.parent_id = 1936;
    

И вы получите что-то вроде ниже, где записи NULL являются прежними ассоциациями.

1769 1937 1936 НОЛЬ

1770 1938 1936 НОЛЬ

1771 1939 1936 НОЛЬ

1772 1940 1936 НОЛЬ

1773 1941 1936 сумка-001

1776 1950 1936 сумка-002

Это нормально?

Author: musicliftsme, 2013-10-19

1 answers

Вы уверены, что это стандартное поведение?
Я взглянул на структуру таблицы, и на ней есть 2 константы.

CREATE TABLE `catalog_product_super_link` (                                                                                                                                        
    `link_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Link ID',                                                                                                            
    `product_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Product ID',                                                                                                         
    `parent_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Parent ID',                                                                                                           
    PRIMARY KEY (`link_id`),                                                                                                                                                         
    UNIQUE KEY `UNQ_CATALOG_PRODUCT_SUPER_LINK_PRODUCT_ID_PARENT_ID` (`product_id`,`parent_id`),                                                                                     
    KEY `IDX_CATALOG_PRODUCT_SUPER_LINK_PARENT_ID` (`parent_id`),                                                                                                                    
    KEY `IDX_CATALOG_PRODUCT_SUPER_LINK_PRODUCT_ID` (`product_id`),                                                                                                                  
    CONSTRAINT `FK_CAT_PRD_SPR_LNK_PARENT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`parent_id`) REFERENCES `catalog_product_entity` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE,  
    CONSTRAINT `FK_CAT_PRD_SPR_LNK_PRD_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`product_id`) REFERENCES `catalog_product_entity` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE     
) ENGINE=InnoDB;

Это означает, что если продукт удален (таким образом, строка удалена из catalog_product_entity), любая строка в catalog_product_super_link, у которой есть этот идентификатор продукта в столбцах parent_id или entity_id, будет удалена.

Проверьте, не потеряли ли вы ограничения при переносе базы данных.

 2
Author: Marius, 2014-03-18 11:40:12