Ich habe diesen Fehler beim Filtern einer Produktsammlung erhalten
Item (Mage_Catalog_Model_Product) with the same id "6058" already exist
und wollte fragen was den fehler verursachen könnte da es nur ein (sichtbares) produkt mit der gleichen id in magento gibt.
Gibt es eine Tabelle, die gelöscht werden muss, um dieses Dupilcat zu entfernen?
magento-1.8
product
catalog
collection-filtering
user1704524
quelle
quelle
group by
, um nur die eindeutige Produkt-ID zu erhalten. Siehe magento.stackexchange.com/questions/12773/…Antworten:
Das Hinzufügen der
distinct
in der akzeptierten Antwort vorgeschlagenen Option behebt das Problem, es treten jedoch Leistungsprobleme auf. Die Datenbank erstellt möglicherweise temporäre Tabellen auf der Festplatte, wenn eine Abfrage mit ausgeführt wird,distinct
und dies verlangsamt Ihre Anforderung. Sie können stattdessengroup
der Sammlung eine Bedingung hinzufügen , um Duplikate zu entfernen.Schauen Sie sich diesen Beitrag an . Was sie getan haben (und ich habe es auch getan), ist eine Gruppierung nach der Entitäts-ID. Dies sollte eine bessere Leistung bringen.
quelle
distinct()
Lösung und dies werden alle zusätzlichen Datensätze aus der Abfrage entfernen, was bedeutet, dass Sie möglicherweise Daten verlieren, ohne es zu bemerken. Dies ist also möglicherweise nicht die beste Lösung, wie in meinem Fall. Ich versuche jetzt, eine Möglichkeit zu finden, beide Datensätze aus meiner verknüpften Tabelle in die Auflistung zu übernehmen, damit ich beide Datensätze in derselben Zeile im Raster anzeigen kann.Normalerweise ist dies ein Fehler in den Daten oder in der Auflistungsimplementierung.
Hier ist eine Lösung für ein breiteres Problem. Dies funktioniert auf beliebige Sammlung, nicht nur für
Catalog_Model_Product
.Schritt 1. Ändern der Core - Datei
lib/Varien/Data/Collection.php
,function addItem()
aber im Gegensatz zu dieser Antwort schon sagt, nicht verbergen , den Fehler.Fügen Sie stattdessen der ausgelösten Ausnahme zusätzliche Fehlerinformationen hinzu:
Schritt 2. Nehmen Sie die fehlerhafte Abfrage aus Ihrem Fehlerbericht und führen Sie sie manuell aus. Sehen Sie, welche Datensätze den Sammlungsschlüssel duplizieren. Nach
order by <key field>
Bedarf hinzufügen.Zerlegen Sie die Abfrage und entfernen Sie die beteiligten Tabellen nacheinander, um festzustellen, welcher Datensatz die Duplizierung verursacht hat.
Ich glaube, dieser Patch sollte im Kern sein.
quelle
Ihr Problem ist, dass Sie über eine Sammlung verfügen (wahrscheinlich mit einem Join oder einer Union), die dazu führt, dass dasselbe Produkt zweimal in die Sammlung geladen wird.
Sie können die zu ladende Sammlung ändern, indem Sie dem ausgewählten Objekt eine eigene Methode hinzufügen.
Siehe http://framework.zend.com/manual/1.12/en/zend.db.select.html
Dies ist jedoch mit Problemen verbunden. Die Verwendung von distinct führt dazu, dass temporäre Tabellen auf der Festplatte erstellt werden und nicht im Arbeitsspeicher, was mit Leistungseinbußen verbunden ist.
quelle
In meinem Fall
funktioniert nicht ich benutze:
Vielleicht ist er auch für jemanden hilfreich
quelle