Estou recebendo esse erro ao tentar filtrar uma coleção de produtos
Item (Mage_Catalog_Model_Product) with the same id "6058" already exist
e queria perguntar o que poderia causar o erro, uma vez que existe apenas um produto (visível) com o mesmo ID no Magento.
Existe uma tabela que precise ser limpa para remover esse dupilcate?
magento-1.8
product
catalog
collection-filtering
user1704524
fonte
fonte
group by
para obter apenas o ID do produto exclusivo. Veja magento.stackexchange.com/questions/12773/…Respostas:
Adicionar o
distinct
sugerido na resposta aceita corrige o problema, mas há problemas de desempenho. O banco de dados pode criar tabelas temporárias no disco durante a execução de uma consultadistinct
e isso atrasará sua solicitação. Você pode adicionar umagroup
condição à coleção para remover duplicatas.Dê uma olhada neste post . O que eles fizeram (e eu também fiz) é agrupar pelo ID da entidade. Isso deve ter um desempenho melhor.
fonte
distinct()
solução e isso removerão quaisquer registros adicionais da consulta, o que significa que você pode perder dados sem perceber. Portanto, essa pode não ser a melhor solução, como no meu caso. Agora estou tentando encontrar uma maneira de obter os dois registros da minha tabela unida na coleção para que eu possa mostrar os dois registros na mesma linha da grade.Normalmente, esse é um erro nos dados ou na implementação da coleção.
Aqui está uma solução para um problema mais amplo. Isso funciona na coleção arbitrária, não apenas para
Catalog_Model_Product
.Etapa 1. Modificar o arquivo de núcleo
lib/Varien/Data/Collection.php
,function addItem()
mas, ao contrário esta resposta sugere, não escondem o erro.Em vez disso, adicione informações de erro extras à exceção lançada:
Etapa 2. Pegue a consulta incorreta do seu relatório de erros e execute-a manualmente. Veja quais registros duplicam a chave de coleção. Adicione
order by <key field>
conforme necessário.Dissecar a consulta removendo as tabelas participantes uma por uma e ver qual registro causou a duplicação.
Eu acredito que este patch deve estar no centro.
fonte
Seu problema é que você tem uma coleção (provavelmente com uma associação ou união) que está resultando no carregamento do mesmo produto duas vezes na coleção.
Você pode alterar a coleção que está sendo carregada adicionando um método distinto ao objeto selecionado.
Consulte http://framework.zend.com/manual/1.12/en/zend.db.select.html
Mas isso vem com problemas inerentes. O uso de distinct fará com que tabelas temporárias sejam criadas no disco, e não na memória, com penalidades de desempenho.
fonte
No meu caso
não funciona eu uso:
Mat ser hejpful para alguém também
fonte