Desidero pre-filtrare * i dati nella griglia delle fatture visibili nel pannello di amministrazione di Magento.Come selezionare campi specifici con alias usando joinTable o joinField in Magento
Here è una domanda che ho chiesto in precedenza, e questa è correlata alla soluzione presentata per questo, quindi potrebbe fungere da buona spiegazione.
Quindi, sto modificando il metodo Mage_Adminhtml_Block_Sales_Invoice_Grid :: _ prepareCollection in modo tale che prima recuperi il cliente indicato dall'amministratore connesso. Quindi recupererà gli ordini da questi clienti - idealmente solo gli ID ordine - Quindi unisci questa raccolta a vendite/order_invoice_grid, per ottenere le fatture da elencare per questo amministratore.
Sulla base dell'ultima risposta e l'utilizzo di these documenti, in seguito sono 3 modi che ho provato unendo queste informazioni: (Codice di esempio 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('*'));
Quando faccio quanto sopra, vedo il seguente errore:
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()
Se rimuovo la seconda chiamata a joinTable, il codice riportato sopra funziona, ma non è quello che voglio.
L'altro metodo ho provato è con questo codice:
$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('*'));
Qui l'errore si verifica nella seconda riga, dove sto effettivamente cercando di alias l'order.entity_id campo in modo che non sia in conflitto con la fattura tabelle entity_id. Tuttavia, che produce un errore come:
Item (Mage_Customer_Model_Customer) with the same id "1" already exist
Ho solo bisogno dell'ordine id in modo che possa ottenere fatture relative, il che suggerisce che posso anche usare funzione joinField, che ho provato come segue:
$collection = Mage::getResourceModel('customer/customer_collection');
$collection->joinField('order_entity_id', 'sales/order_grid', 'entity_id', 'customer_id=entity_id' , null, 'left');
ma mi dà il seguente errore:
Prodotto (Mage_Customer_Model_Customer) con lo stesso ID "1" esiste già
sto cercando una soluzione che unisce personalizzato ER-> fatture.
By pre-filtro voglio dire che i dati riportati nella griglia è filtrata anche prima di qualsiasi cosa è presentato nella griglia.
Ok, ora il mio codice è simile:
$collection =
Mage::getResourceModel('customer/customer_collection');
$collection->joinTable('sales/order_grid', 'customer_id=entity_id', array('entity_id' => 'order_entity_id'));
E l'errore che ottengo è:
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'
ho provato con il suo suggerimento, come segue: "$ raccolta = Mage :: getResourceModel ($ this -> _ getCollectionClass()); $ Collezione> joinTable ('vendite/ordine', 'ENTITY_ID = order_id', array ('*'));" E questa volta l'errore è: Fatal error: Call to metodo non definito Mage_Sales_Model_Mysql4_Order_Invoice_Grid_Collection :: joinTable () in /var/www/magento/app/code/local/Myproject/Adminhtml/Block/Sales/Invoice/Grid.php alla riga 41 –
È perché Mage_Sales_Model_Mysql4_Order_Grid_Collection eredita da Mage_Core_Model_Mysql4_Collection_Abstract, non usa il modello eav; per usare join ($ table, $ cond, $ cols = '*'). La collezione cliente eredita da Mage_Eav_Model_Entity_Collection_Abstract e tu usi joinTable –