Обычно это ошибка в данных или в реализации коллекции.
Вот решение более широкой проблемы. Это работает на произвольной коллекции, а не только для 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/…