Como usar agrupar na coleção magento com consulta de junção

13

Na grade administrativa do módulo, estou usando esse código para obter a coleta e agrupá-los por ID do cliente

$collection = Mage::getModel('referafriend/statistics')->getCollection();
$collection->getSelect()->group('entity_id');
$this->setCollection($collection);

mas aqui eu tenho que usar as funções de renderizador e filtro para obter informações do cliente, como nome e email, em cada uma delas entity_id. Quero ingressar no modelo do cliente com a tabela do meu módulo. por isso eu escrevi este código

 $collection = Mage::getModel('customer/customer')->getCollection()
 ->addNameToSelect();
$collection->getSelect()->join(array('refer' => 'table_name'),'refer.entity_id = e.entity_id'
          ); 
   $collection->getSelect()->group('entity_id'); 
   $collection->addAttributeToSelect('*');

mas me dá esse erro

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'entity_id' in group statement is ambiguous

qualquer ajuda será muito apreciada.

Haris
fonte
1
deve ser -> group ('e.entity_id');
Amit Bera
Você deve adicionar isso como resposta, com alguns detalhes sobre por que você precisa de:e.
Jonathan Hussey
Desculpe por este erro bobo. @AmitBera, obrigado por sua ajuda e adicione-o como resposta para que a pergunta possa ser encerrada.
Haris 16/10

Respostas:

26

Você precisa adicionar o nome da tabela em group by condition.Como fez not added on conditions table nameno grupo de tabelas ('entity_id') paraquery did not find columns name

 getSelect()->group('e.entity_id');

A lógica é:

$collection->getSelect()->group('TABLE_NAME.FIELD_NAME')
Amit Bera
fonte
1
Além disso, se você precisar agrupar por vários campos, basta adicionar mais -> cláusulas group () -> group ('field1') -> group ('field2');
Gregc
Quero encomendar produtos exclusivos usando o grupo por. Eu tenho 2 ordem com 2 mesmo item de ordem. Atualmente, são exibidas 4 linhas na grade. Mas eu preciso de 2 linhas usando group by.
Dhaduk Mitesh
Compartilhe seu código
Amit Bera
$collection = $object_manager->create('\Magento\Sales\Model\Order\Item')->getCollection(); $collection->getSelect()->join( ['order' => $this->getTable('sales_order')], 'order.entity_id = main_table.order_id and (if(main_table.parent_item_id IS NULL,main_table.price != 0.0000,main_table.parent_item_id IS NULL))', [ 'order_number' => 'order.increment_id', 'order_store_id' => 'order.store_id', ] );
Dhaduk Mitesh
Quero agrupar por parent_item_idordem.
Dhaduk Mitesh