Error de categoría: ya existe un elemento (Magento \ Catálogo \ Modelo \ Categoría \ Interceptor) con el mismo ID "191"


9

Sé que hay un problema similar con respecto a un producto , pero ahora tengo este error con una categoría.

No recuerdo que hice algo diferente, de repente comenzó a arrojar este error tan pronto como llegué a una página de categoría en la interfaz.

A veces, volver a guardar la categoría en el administrador resolvió el problema, pero la mayoría de las veces no lo hace. ¿De dónde viene este error? ¿Como arreglarlo? ¿Alguien más también encontró este error?

Editar

Parece que la página de categoría le pide a la tabla de reescritura de URL las URL. Genera 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 

Pero si su url_rewrite-tabla está dañada (lo que es más probable en mi caso), termina con ID duplicados.


2
Sometimes re-saving the category in the admin resolved the issueEsto funcionó para mí, ¡Gracias!
nuwaus

3
Tengo el mismo problema, pero volver a guardar la categoría no ayuda.
Oliver Schmid

Alguien encontró una solución? Tengo el mismo problema, para mí es extraño. Tenga 10 tiendas creadas en las cuales solo 3 tiendas y 1 es la tienda predeterminada, la página del catálogo funciona pero en las otras tiendas no. He configurado que la página de inicio era una página de catálogo
Gianni Di Falco

Respuestas:


11
  1. Eliminar registros de la tabla 'url_rewrite' donde "entity_type" es "category".
  2. correr php bin/magento indexer:reindex

Tiene un registro de 3000, así que tengo que truncar la tabla para que esto funcione :(
fudu

3
  1. Vaya a Panel de administración> Marketing> Reescrituras de URL.
  2. Filtrar por "categoría / {entity_id} (que causa el error ya existente)" en targer_path. Si encuentra el mismo target_path para la misma tienda, elimine el.
  3. correr php bin/magento indexer:reindex

3

La siguiente consulta SQL limpia reescrituras de categorías duplicadas. No lo use sin una copia de seguridad.

Puede usar n98-magerun2 db:consoleo cualquier otro 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
  )

0

Para nosotros solo ejecutar esto hizo el truco:

php bin/magento indexer:reindex

Nuestro error (con Magento 2.2.2) fue este al hacer una búsqueda frontend o al ingresar una categoría:

Excepción # 0 (Excepción): Ya existe un elemento (Magento \ Catálogo \ Modelo \ Producto \ Interceptor) con el mismo ID "XXXX".


No sé por qué este comentario está degradado, pero la reindexación en realidad corrigió el error en 2.3.4
puntable el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.