Я получаю эту ошибку при попытке отфильтровать коллекцию товаров
Item (Mage_Catalog_Model_Product) with the same id "6058" already exist
и хотел спросить, что может вызвать ошибку, поскольку внутри Magento есть только один (видимый) продукт с таким же идентификатором.
Есть ли таблица, которую нужно очистить, чтобы удалить этот дубликат?
magento-1.8
product
catalog
collection-filtering
user1704524
источник
источник
group by
чтобы получить только уникальный идентификатор продукта. См. Magento.stackexchange.com/questions/12773/…Ответы:
Добавление
distinct
предложенного в принятом ответе решает проблему, но имеет проблемы с производительностью. База данных может создавать временные таблицы на диске при выполнении запроса с помощью,distinct
и это замедлит ваш запрос. Вместо этого вы можете добавитьgroup
условие в коллекцию для удаления дубликатов.Посмотрите на этот пост . То, что они сделали (и я тоже это сделал), сгруппированы по идентификатору сущности. Это должно работать лучше.
источник
distinct()
Решение , и это приведет к удалению каких - либо дополнительные записи из запроса, который означает , что вы могли бы потерять данные не заметив. Так что это может быть не лучшим решением, как в моем случае. Сейчас я пытаюсь найти способ получить обе записи из моей объединенной таблицы в коллекцию, чтобы я мог показать обе записи в одной строке в сетке.Обычно это ошибка в данных или в реализации коллекции.
Вот решение более широкой проблемы. Это работает на произвольной коллекции, а не только для
Catalog_Model_Product
.Шаг 1. Изменить файл ядра
lib/Varien/Data/Collection.php
,function addItem()
, но в отличие от этого ответа предполагает, не скрыть ошибку.Вместо этого добавьте дополнительную информацию об ошибке к сгенерированному исключению:
Шаг 2. Возьмите ошибочный запрос из вашего сообщения об ошибке и запустите его вручную. Посмотрите, какие записи дублируют ключ коллекции. Добавьте по
order by <key field>
мере необходимости.Рассеките запрос, удаляя участвующие таблицы по одному, и посмотрите, какая запись вызвала дублирование.
Я считаю, что этот патч должен быть в основном.
источник
Ваша проблема в том, что у вас есть коллекция (вероятно, с объединением или объединением), в результате чего один и тот же продукт загружается в коллекцию дважды.
Вы можете изменить загружаемую коллекцию, добавив отдельный метод к объекту select.
См. Http://framework.zend.com/manual/1.12/en/zend.db.select.html.
Но это связано с внутренними проблемами. Использование Different приведет к созданию временных таблиц на диске, а не в памяти, что приводит к снижению производительности.
источник
В моем случае
не работает я использую:
Мат может быть полезным для кого-то
источник