Erro de categoria: o item (Magento \ Catálogo \ Modelo \ Categoria \ Interceptor) com o mesmo ID “191” já existe

9

Sei que há um problema semelhante em relação a um produto , mas agora tenho esse erro em uma categoria.

Não me lembro de ter feito algo diferente; de ​​repente, começou a gerar esse erro assim que cheguei a uma página de categoria no frontend.

Às vezes, salvar novamente a categoria no administrador resolveu o problema, mas na maioria das vezes isso não ocorre. De onde vem esse erro? Como corrigi-lo? Alguém mais encontrou esse erro também?

Editar

Parece que a página da categoria solicita a URL para reescrever a tabela. Ele gera esta consulta:

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 

Mas se a sua url_rewritetabela estiver corrompida (o que é mais provável no meu caso), ela acaba tendo IDs duplicados.

Giel Berkers
fonte
2
Sometimes re-saving the category in the admin resolved the issueIsso funcionou para mim, obrigado !!
nuwaus
3
Eu tenho o mesmo problema, mas salvar novamente a categoria não ajuda.
Oliver Schmid
Alguém encontrou uma correção? Estou tendo o mesmo problema, para mim é estranho. Tenha 10 lojas criadas nas quais apenas 3 lojas e 1 é a loja padrão; a página do catálogo funciona, mas nas outras lojas, não. Eu configurei que a home page foi uma página de catálogo
Gianni Di Falco

Respostas:

11
  1. Exclua registros da tabela 'url_rewrite' onde "entity_type" é "categoria".
  2. corre php bin/magento indexer:reindex
Nilesh Gosai
fonte
Ele tem 3000 álbum, então eu tenho para truncar a tabela para fazer este trabalho :(
Fudu
3
  1. Vá para Painel de administração> Marketing> Regravações de URL.
  2. Filtre por "categoria / {entity_id} (que causa o erro já existente)" no caminho do targer. Se você encontrar o mesmo target_path para a mesma loja, exclua esse.
  3. Corre php bin/magento indexer:reindex
Pribhav
fonte
3

A consulta SQL a seguir limpa as regravações de categoria duplicadas. Não use sem um backup.

Você pode usar n98-magerun2 db:consoleou qualquer outro cliente 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
  )
Alex
fonte
0

Para nós, apenas executando isso, fez o truque:

php bin/magento indexer:reindex

Nosso erro (com o Magento 2.2.2) foi esse ao fazer uma pesquisa de front-end ou entrar na categoria:

Exceção # 0 (exceção): o item (Magento \ Catálogo \ Modelo \ Produto \ Interceptor) com o mesmo ID "XXXX" já existe.

Webninja
fonte
Não sei por que esse comentário foi rebaixado, mas a reindexação realmente corrigiu o erro em 2.3.4
puntable em