J'ai eu cette erreur en essayant de filtrer une collection de produits
Item (Mage_Catalog_Model_Product) with the same id "6058" already exist
et je voulais savoir ce qui pouvait causer l'erreur car il n'y a qu'un seul produit (visible) avec le même ID à l'intérieur de Magento.
Y a-t-il un tableau qui doit être effacé pour supprimer ce dupilcate?
magento-1.8
product
catalog
collection-filtering
user1704524
la source
la source
group by
pour obtenir uniquement un identifiant de produit unique. Voir magento.stackexchange.com/questions/12773/…Réponses:
L'ajout du
distinct
comme suggéré dans la réponse acceptée résout le problème mais présente des problèmes de performances. La base de données peut créer des tables temporaires sur le disque lors de l'exécution d'une requête avecdistinct
et cela ralentira votre demande. Vous pouvez à la place ajouter unegroup
condition à la collection pour supprimer les doublons.Jetez un oeil à ce post . Ce qu'ils ont fait (et je l'ai fait aussi) est groupé par l'ID d'entité. Cela devrait mieux fonctionner.
la source
distinct()
solution et cela supprimera tous les enregistrements supplémentaires de la requête, ce qui signifie que vous risquez de perdre des données sans le remarquer. Ce n'est donc peut-être pas la meilleure solution, comme dans mon cas. J'essaie maintenant de trouver un moyen d'obtenir les deux enregistrements de ma table jointe dans la collection afin de pouvoir afficher les deux enregistrements sur la même ligne dans la grille.Normalement, il s'agit d'un bogue dans les données ou dans l'implémentation de la collection.
Voici une solution à un problème plus large. Cela fonctionne sur la collecte arbitraire, non seulement pour
Catalog_Model_Product
.Étape 1. Modifier le fichier de base
lib/Varien/Data/Collection.php
,function addItem()
mais , contrairement à cette réponse suggère, ne cache pas l'erreur.Ajoutez plutôt des informations d'erreur supplémentaires à l'exception levée:
Étape 2. Prenez la requête incriminée de votre rapport d'erreur et exécutez-la à la main. Voir quels enregistrements dupliquent la clé de collecte. Ajoutez
order by <key field>
au besoin.Disséquez la requête en supprimant les tables participantes une par une et voyez quel enregistrement a provoqué la duplication.
Je crois que ce patch devrait être au cœur.
la source
Votre problème est que vous avez une collection (probablement avec une jointure ou une union) qui entraîne le même produit chargé deux fois dans la collection.
Vous pouvez modifier la collection en cours de chargement en ajoutant une méthode distincte à l'objet de sélection.
Voir http://framework.zend.com/manual/1.12/en/zend.db.select.html
Mais cela s'accompagne de problèmes inhérents. L'utilisation de distinct entraînera la création de tables temporaires sur le disque, et non dans la mémoire, ce qui entraîne des pénalités de performances.
la source
Dans mon cas
ne fonctionne pas j'utilise:
Mat être aussi bien pour quelqu'un
la source