类别错误:具有相同ID“ 191”的项目(Magento \ Catalog \ Model \ Category \ Interceptor)已经存在


9

我知道产品也有类似的问题,但是现在我遇到了类别错误。

我不记得自己做了什么不同的事情,当我进入前端的类别页面时,突然就开​​始抛出此错误。

有时在管理员中重新保存类别可以解决问题,但大多数情况下并不能解决问题。此错误来自何处?如何解决?还有其他人也遇到此错误吗?

编辑

看起来类别页面要求URL重写表提供URL。它生成此查询:

SELECT `e`.*, 
   IF(at_is_active.value_id > 0, at_is_active.value, 
   at_is_active_default.value) AS 
   `is_active`, 
   `url_rewrite`.`request_path` 
FROM   `catalog_category_entity` AS `e` 
   INNER JOIN `catalog_category_entity_int` AS `at_is_active_default` 
           ON ( `at_is_active_default`.`entity_id` = `e`.`entity_id`) 
              AND ( `at_is_active_default`.`attribute_id` = '46' ) 
              AND `at_is_active_default`.`store_id` = 0 
   LEFT JOIN `catalog_category_entity_int` AS `at_is_active` 
          ON ( `at_is_active`.`entity_id` = `e`.`entity_id` ) 
             AND ( `at_is_active`.`attribute_id` = '46' ) 
             AND ( `at_is_active`.`store_id` = 1 ) 
   LEFT JOIN `url_rewrite` 
          ON ( url_rewrite.entity_id = e.entity_id ) 
             AND ( url_rewrite.is_autogenerated = 1 
                   AND url_rewrite.store_id = 1 
                   AND url_rewrite.entity_type = 'category' ) 
WHERE  ( IF(at_is_active.value_id > 0, at_is_active.value,   
     at_is_active_default.value) 
            = 
            '1' ) 
   AND ( `e`.`entity_id` IN( '10', '170', '171', '172', 
                             '173', '175', '176', '177', 
                             '178', '179', '180', '189', '276' ) ) 
ORDER  BY `e`.`position` ASC 

但是,如果您的url_rewrite-table已损坏(在我的情况下极有可能),那么它最终将具有重复的ID。


2
Sometimes re-saving the category in the admin resolved the issue这对我有用,谢谢!
nuwaus

3
我有同样的问题,但是重新保存类别无济于事。
奥利弗·施密德

有人找到了解决办法?我遇到了同样的问题,对我来说很奇怪。在只有3个商店中创建了10个商店,而默认商店中有1个是创建目录目录的,而在其他商店中则没有。我已经设置好主页为目录页面
Gianni Di Falco

Answers:


11
  1. 从“ url_rewrite”表中删除记录,其中“ entity_type”为“ category”。
  2. php bin/magento indexer:reindex

它有3000条记录,所以我必须截断该表才能进行此工作:(
fudu

3

以下SQL查询清除重复的类别重写。请勿在没有备份的情况下使用。

您可以使用n98-magerun2 db:console或任何其他mysql客户端:

 delete
  from url_rewrite
  where url_rewrite_id in (
    select url_rewrite_id
    FROM (select url_rewrite_id
      from url_rewrite
      where entity_type = 'category'
      group by target_path, store_id
      having count(*) > 1) t
  )

3
  1. 转到管理面板>市场营销> URL重写
  2. 在targer_path中按“ category / {entity_id}(导致已经存在的错误)”进行过滤。如果为同一商店找到相同的target_path,则删除它。
  3. php bin/magento indexer:reindex

0

对于我们来说,运行这个就可以了:

php bin/magento indexer:reindex

我们的错误(使用Magento 2.2.2)是在进行前端搜索或输入类别时发生的错误:

异常#0(异常):具有相同ID“ XXXX”的项目(Magento \ Catalog \ Model \ Product \ Interceptor)已经存在。


不知道为什么这个注释downrated,但实际上重建索引固定在2.3.4错误
puntable
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.