Зазвичай це помилка в даних або в реалізації колекції.
Ось вирішення більш широкого питання. Це працює на довільному зборі, не тільки дляCatalog_Model_Product
.
Крок 1. Змінити файл ядра lib/Varien/Data/Collection.php
, function addItem()
, але в відміну від цієї відповіді , не приховуйте помилку.
Натомість додайте додаткову інформацію про помилки до викинутого винятку:
if (isset($this->_items[$itemId])) {
throw new Exception('Item ('.get_class($item).
') with the same id "'.$item->getId().'" already exist' .
'. SQL that caused this: ' . $this->getSelect());
}
Крок 2. Візьміть запит про порушення від свого звіту про помилки та запустіть його вручну. Подивіться, які записи копіюють ключ збору. Додайтеorder by <key field>
за потребою.
Розділіть запит на видалення таблиць-учасниць, що беруть участь один за одним, і подивіться, який запис викликав дублювання.
Я вважаю, цей патч повинен бути в основі.
group by
лише унікальний ідентифікатор продукту. Дивіться magento.stackexchange.com/questions/12773/…