Comment sélectionner des champs avec des alias à l'aide de joinTable ou joinField dans Magento

Je veux pré-filtre* les données de la facture de la grille visible dans Magento panneau d'admin.

Ici est une question que j'ai posée tout à l'heure, et celui-ci est lié à la solution présentée pour que, par conséquent, il pourrait agir comme une bonne explication.

Donc, je suis à la modification de la Mage_Adminhtml_Block_Sales_Invoice_grid::_prepareCollection méthode de telle sorte qu'il récupère à la clientèle visée par l'utilisateur connecté en admin. Puis il va chercher les commandes à partir de ces client(s) - idéalement, uniquement l'id de la commande, Alors rejoignez cette collection de ventes/order_invoice_grid, pour obtenir les factures de cette administration.

Basé sur la dernière réponse et de l'aide ces docs, à la suite de 3 manières différentes, j'ai essayé de rejoindre cette information: (Exemple de Code 1)

$collection = Mage::getResourceModel('customer/customer_collection');        
$collection->joinTable('sales/order_grid', 'customer_id=entity_id', array('*'));
$collection->joinTable('sales/invoice_grid', 'order_id=main_table.entity_id', array('*'));

Quand je le fais ci-dessus, je vois le message d'erreur suivant:

A joint field with this alias (0) is already declared.

#0 /var/www/magento/app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php(706): Mage::exception('Mage_Eav', 'A joint field w...')
#1 /var/www/magento/app/code/local/Myproject/Adminhtml/Block/Sales/Invoice/Grid.php(41): Mage_Eav_Model_Entity_Collection_Abstract->joinTable('sales/invoice_g...', 'order_id=main_t...', Array)
#2 /var/www/magento/app/code/core/Mage/Adminhtml/Block/Widget/Grid.php(576): Myproject_Adminhtml_Block_Sales_Invoice_Grid->_prepareCollection()
#3 /var/www/magento/app/code/core/Mage/Adminhtml/Block/Widget/Grid.php(582): Mage_Adminhtml_Block_Widget_Grid->_prepareGrid()

Si je supprime le deuxième appel à joinTable, le code ci-dessus fonctionne, mais ce n'est pas ce que je veux.

L'autre méthode que j'ai essayé avec ce code:

$collection = Mage::getResourceModel('customer/customer_collection');        
$collection->joinTable('sales/order_grid', 'customer_id=entity_id', array('entity_id as order_entity_id'));
$collection->joinTable('sales/invoice_grid', 'order_id=main_table.entity_id', array('*'));

Voici le message d'erreur s'affiche sur la deuxième ligne, là où je suis en train d'essayer de faire un alias de l'ordre des champs.entity_id de sorte qu'il n'entre pas en conflit avec la facture tables entity_id. Cependant, qui produit un message d'erreur tel que:

Élément (Mage_Customer_Model_Customer)
avec le même id "1" existent déjà

J'ai seulement besoin de numéro de commande afin que je puisse obtenir les factures, ce qui suggère que je peux aussi utiliser joinField fonction, j'ai essayé comme suit:

$collection = Mage::getResourceModel('customer/customer_collection');
$collection->joinField('order_entity_id', 'sales/order_grid', 'entity_id', 'customer_id=entity_id' , null, 'left');

Mais il me donne l'erreur suivante:

Élément (Mage_Customer_Model_Customer) avec le même id "1" existent déjà

Je suis à la recherche d'une solution qui rejoint client->factures.


Par pré-filtre, je veux dire que les données figurant dans la grille est filtré avant même tout ce qui est présenté dans la grille.


Ok, maintenant, mon code ressemble à ceci:

$collection = 
Mage::getResourceModel('customer/customer_collection');
$collection->joinTable('sales/order_grid', 'customer_id=entity_id', array('entity_id' => 'order_entity_id'));

Et le message d'erreur que je reçois est:

SELECT `e`.*, `sales_flat_order_grid`.`order_entity_id` AS `entity_id` FROM `customer_entity` AS `e`
 INNER JOIN `sales_flat_order_grid` ON (sales_flat_order_grid.customer_id=e.entity_id) WHERE (e.entity_type_id = '1') ORDER BY `e`.`created_at` desc, `e`.`created_at` desc LIMIT 20

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'sales_flat_order_grid.order_entity_id' in 'field list'

OriginalL'auteur Ozair Kafray | 2010-10-16