Ten błąd pojawia się podczas próby filtrowania kolekcji produktów
Item (Mage_Catalog_Model_Product) with the same id "6058" already exist
i chciałem zapytać, co może powodować błąd, ponieważ w Magento jest tylko jeden (widoczny) produkt o tym samym identyfikatorze.
Czy istnieje tabela, którą należy wyczyścić, aby usunąć ten duplikat?
magento-1.8
product
catalog
collection-filtering
użytkownik1704524
źródło
źródło
group by
aby uzyskać tylko unikalny identyfikator produktu. Zobacz magento.stackexchange.com/questions/12773/…Odpowiedzi:
Dodanie
distinct
zgodnie z sugestią w zaakceptowanej odpowiedzi rozwiązuje problem, ale ma problemy z wydajnością. Baza danych może tworzyć tabele tymczasowe na dysku podczas wykonywania zapytania,distinct
co spowolni twoje żądanie. Zamiast tego możesz dodaćgroup
warunek do kolekcji, aby usunąć duplikaty.Spójrz na ten post . To, co zrobili (i ja też to zrobiłem), to pogrupowanie według identyfikatora jednostki. To powinno działać lepiej.
źródło
distinct()
Rozwiązanie i będzie to usunąć wszelkie dodatkowe rekordy z zapytaniem, co oznacza, może nastąpić utrata danych nie zauważając. Może to nie być najlepsze rozwiązanie, jak w moim przypadku. Teraz próbuję znaleźć sposób na przeniesienie obu rekordów z mojej połączonej tabeli do kolekcji, aby wyświetlić oba rekordy w tym samym wierszu w siatce.Zwykle jest to błąd w danych lub implementacji kolekcji.
Oto rozwiązanie szerszego problemu. Działa to w przypadku arbitralnego pobierania, nie tylko dla
Catalog_Model_Product
.Krok 1. zmodyfikować plik rdzeń
lib/Varien/Data/Collection.php
,function addItem()
ale w przeciwieństwie do tego odpowiedź sugeruje, nie ukrywają ten błąd.Zamiast tego dodaj dodatkowe informacje o błędzie do zgłoszonego wyjątku:
Krok 2. Weź błędne zapytanie ze swojego raportu o błędzie i uruchom go ręcznie. Zobacz, jakie rekordy duplikują klucz kolekcji. Dodaj
order by <key field>
w razie potrzeby.Przeanalizuj zapytanie usuwając tabele uczestniczące jeden po drugim i sprawdź, który rekord spowodował duplikację.
Uważam, że ta łatka powinna być rdzeniem.
źródło
Problem polega na tym, że masz kolekcję (prawdopodobnie z łączeniem lub związkiem), w wyniku której ten sam produkt jest ładowany do kolekcji dwukrotnie.
Możesz zmienić ładowaną kolekcję, dodając odrębną metodę do wybranego obiektu.
Zobacz http://framework.zend.com/manual/1.12/en/zend.db.select.html
Ale wiąże się to z nieodłącznymi problemami. Użycie odrębnego spowoduje utworzenie tabel tymczasowych na dysku, a nie w pamięci, co wiąże się z karami wydajności.
źródło
W moim przypadku
nie działa używam:
Niech też ktoś będzie hejpful
źródło