Recibí este error al intentar filtrar una colección de productos
Item (Mage_Catalog_Model_Product) with the same id "6058" already exist
y quería preguntar qué podría causar el error ya que solo hay un producto (visible) con la misma ID dentro de Magento.
¿Hay alguna tabla que deba borrarse para eliminar este duplicado?
magento-1.8
product
catalog
collection-filtering
usuario1704524
fuente
fuente
group by
para obtener solo una identificación de producto única. Ver magento.stackexchange.com/questions/12773/…Respuestas:
Agregar lo
distinct
que se sugiere en la respuesta aceptada soluciona el problema, pero tiene problemas de rendimiento. La base de datos puede crear tablas temporales en el disco al ejecutar una consulta condistinct
y esto ralentizará su solicitud. En su lugar, puede agregar unagroup
condición a la colección para eliminar duplicados.Echa un vistazo a esta publicación . Lo que hicieron (y lo he hecho también) es agrupar por la identificación de la entidad. Esto debería funcionar mejor.
fuente
distinct()
solución y esto eliminará cualquier registro adicional de la consulta, lo que significa que podría perder datos sin darse cuenta. Entonces, esta podría no ser la mejor solución, como en mi caso. Ahora estoy tratando de encontrar una manera de obtener los dos registros de mi tabla unida en la colección para poder mostrar ambos registros en la misma fila en la cuadrícula.Normalmente, este es un error en los datos o en la implementación de la colección.
Aquí hay una solución a un problema más amplio. Esto funciona en una colección arbitraria, no solo para
Catalog_Model_Product
.Paso 1. Modificar el archivo central
lib/Varien/Data/Collection.php
,function addItem()
pero a diferencia de esta respuesta sugiere, no ocultan el error.En su lugar, agregue información de error adicional a la excepción lanzada:
Paso 2. Tome la consulta ofensiva de su informe de errores y ejecútela a mano. Vea qué registros duplican la clave de colección. Agregue
order by <key field>
según sea necesario.Diseccione la consulta eliminando las tablas participantes una por una, y vea qué registro causó la duplicación.
Creo que este parche debería estar en el núcleo.
fuente
Su problema es que tiene una colección (probablemente con una unión o unión) que resulta en que el mismo producto se cargue en la colección dos veces.
Puede modificar la colección que se está cargando agregando un método distinto al objeto seleccionado.
Ver http://framework.zend.com/manual/1.12/en/zend.db.select.html
Pero esto viene con problemas inherentes. El uso de distintivo hará que se creen tablas temporales en el disco, no en la memoria, lo que conlleva penalizaciones de rendimiento.
fuente
En mi caso
no funciona yo uso:
Mat también puede ser útil para alguien
fuente