Продукт плоские данные не будут реиндексировать

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

  •  16-10-2019
  •  | 
  •  

Вопрос

Я добавил несколько изображений на свой локальный сайт, и после этого, когда я перешел на страницу с подробностями продукта, я получил страницу ошибки Magento, в котором говорилось, что была проведена ошибка обработка вашего запроса, а файл изображения не был найден. После этого продукт плоских данных гласит, что его необходимо повторно индексировать, но когда я пытаюсь повторно индектировать его, в нем говорится, что возникла проблема с процессом повторного индекса. Я предполагаю, что изображения связаны с проблемой, поскольку до этого не нужно переосмыслить. Я удалил продукт, для которого я загрузил изображения, я удалил кэш и очистил файлы блокировки, как было предложено на другом посте, подобном этому, который я нашел. Может ли кто -нибудь предложить какие -либо дальнейшие действия, которые я могу предпринять, чтобы отладить это.

<--- Более подробная информация ---> Я запустил файл Reindex в консоли, и он вернул следующую ошибку

   Product Flat Data index process unknown error:
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`startlondon_live`.`#sql-448_15e`, CONSTRAINT `FK_MAG_MAG_CAT_PRD_FLAT_1_ENTT_ID_MAG_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `mag_catalog_product_entity` (`entity_id`) ON DE)' in /home/start-london/public_html/lib/Zend/Db/Statement/Pdo.php:228

Единственное, о чем я мог придумать, это отключить ограничения иностранных ключей в базе данных, но это не помогло

Это было полезно?

Решение

Надеюсь, я понял проблему под рукой: и вопрос ...

Эта часть сообщения об ошибке говорит:

startlondon_live`.`#sql-448_15e`, CONSTRAINT `FK_MAG_MAG_CAT_PRD_FLAT_1_ENTT_ID_MAG_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `mag_catalog_product_entity` (`entity_id`)...

Что это говорит мне, так это то, что колонка startlondon_live ссылается на столбец идентификатора объекта каталога продукта (mag_catalog_product_entity) на поле сущности, но Эта запись или поле больше не существует. Анкет Название иностранного ключа не отформатировано, как назвал бы его установщик Magento, так что это говорит мне, что это пользовательский.

По сути, ограничение, которое вы создали из другой таблицы, выйдет из строя в индексере, потому что целевой столбец либо больше не существует, либо будет удалена, отирает ребенка.

Это подводит меня к нескольким мыслям:

  • При создании новых полей в пользовательских моделях ресурсов или для расширения каталога Magento это ненужный для изменения плоских таблиц.
  • Также может быть ненужным создавать отношения иностранных ключей с Entity_ID на плоских таблицах. Отношения FK обеспечивают соблюдение схемы и предотвращают ошибки данных или осиротежное содержание, но, в основе Magento, EAV не прилагает никаких усилий для обеспечения соблюдения этой схемы. Плоские таблицы строятся на лету и атрибуты, которые выставляют себя в качестве атрибутов фронта, автоматически создают необходимые столбцы для плоских таблиц.
  • В случае, если это пользовательская модель ресурсов, вам не нужно иметь отношение FK с плоским таблицей - вместо этого создайте отношение FK с catalog_product_entity стол; В конце концов, это объект записи в Magento для продукта. Вы все еще можете определить свои правила удаления.

В конце концов, вам нужно исправить эту ошибку. Отключение чеков иностранного ключа - это рецепт катастрофы.

Вместо, Удалите изменения схемы от Magento DB. Отключить/включить плоский каталог - или в худший вариант развития событий бросить catalog_product_flat* столы и перестройте их.

Другие советы

Исправление этого

Чтобы решить эту проблему, вам нужно найти, каковы поврежденные записи. Это просто. В этом случае вам нужно создать запрос, чтобы получить пустые регистры:

SELECT a.entity_id FROM catalog_product_flat_2 AS a LEFT JOIN catalog_product_entity AS b ON a.entity_id = b.entity_id WHERE ISNULL(b.entity_id);

Это отобразит поврежденные объекты. Вам нужно только удалить их, и это все.

+-----------+
| entity_id |
+-----------+
|     35427 |
|     35428 |
+-----------+
2 rows in set (0.04 sec)

В качестве примера:

DELETE FROM catalog_product_flat_2 where entity_id = '35427';
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top