Comment utiliser group by dans la collection magento avec une requête de jointure

13

Dans la grille d'administration du module, j'utilise ce code pour obtenir la collecte et les regrouper par identifiant client

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

mais ici, je dois utiliser les fonctions de rendu et de filtrage pour les informations client comme le nom et l'e-mail contre chacun entity_id. je veux rejoindre le modèle client avec la table de mon module. pour cela j'ai écrit ce code

 $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('*');

mais ça me donne cette erreur

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

Toute aide sera grandement appréciée.

Haris
la source
1
ce devrait être -> group ('e.entity_id');
Amit Bera
Vous devriez ajouter ceci comme une réponse avec quelques détails sur les raisons pour lesquelles vous avez besoin dee.
Jonathan Hussey
Désolé pour cette stupide erreur. @AmitBera merci pour votre aide et veuillez l'ajouter comme réponse pour que la question puisse être fermée.
Haris

Réponses:

26

Vous devez ajouter le nom de la table dans group by condition.Comme vous l'avez fait not added on conditions table nameau groupe de tables ('entity_id') afinquery did not find columns name

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

La logique c'est:

$collection->getSelect()->group('TABLE_NAME.FIELD_NAME')
Amit Bera
la source
1
De plus, si vous avez besoin de grouper par plusieurs champs, il suffit d'ajouter plus -> clauses group () -> group ('field1') -> group ('field2');
GregC
Je veux commander des produits uniques en utilisant group by. J'ai 2 commandes avec 2 mêmes articles. Actuellement, il est affiché 4 lignes dans la grille. Mais j'ai besoin de 2 rangs en utilisant group by
Dhaduk Mitesh
Partagez votre code
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
Je veux regrouper par parent_item_idordre.
Dhaduk Mitesh