Quiero pre-filtrar * datos en la cuadrícula de factura visible en el panel de administración de Magento.Cómo seleccionar campos específicos con alias usando joinTable o joinField en Magento
Here es una pregunta que hice antes, y esta está relacionada con la solución presentada para eso, por lo tanto, podría ser una buena explicación.
Por lo tanto, estoy modificando el método Mage_Adminhtml_Block_Sales_Invoice_Grid :: _ prepareCollection para que primero obtenga el cliente referido por el administrador registrado. Luego obtendrá pedidos de estos clientes, idealmente solo los ID de la orden. Luego, una esta colección al ventas/order_invoice_grid, para obtener las facturas que se enumerarán para este administrador.
Sobre la base de la última respuesta y el uso de these documentos, después de 3 maneras que he intentado unirse a esta información: (Código de ejemplo 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('*'));
Cuando yo lo anterior, veo el siguiente error:
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 elimino la segunda llamada a joinTable, el código anterior funciona, pero no es lo que quiero.
El otro método es Probé con este código:
$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('*'));
Aquí aparece el error en la segunda línea, donde en realidad estoy tratando de poner un alias para el order.entity_id campo para que no entre en conflicto con la factura tablas entity_id. Sin embargo, eso produce un error como:
Item (Mage_Customer_Model_Customer) with the same id "1" already exist
solo me falta ordenar el de ID para que puedo conseguir las facturas relacionadas, lo que sugiere que también puedo utilizar la función joinField, que trataba de la siguiente manera:
$collection = Mage::getResourceModel('customer/customer_collection');
$collection->joinField('order_entity_id', 'sales/order_grid', 'entity_id', 'customer_id=entity_id' , null, 'left');
pero me da el siguiente error:
artículo (Mage_Customer_Model_Customer) con el mismo id "1" ya existe
Busco a una solución que une personalizada er-> facturas.
Por prefiltro quiero decir que los datos que figuran en la red se filtra incluso antes de que algo se presenta en la red.
Ok, ahora mi código es el siguiente:
$collection =
Mage::getResourceModel('customer/customer_collection');
$collection->joinTable('sales/order_grid', 'customer_id=entity_id', array('entity_id' => 'order_entity_id'));
Y el error que consigo es:
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'
he intentado con su sugerencia, de la siguiente manera: "$ = colección Mago :: getResourceModel ($ this -> _ getCollectionClass()); $ colección-> joinTable ('ventas/fin', 'entity_id = order_id', array ('*'));" Y esta vez el error es: Fatal error: Llamada a Mage_Sales_Model_Mysql4_Order_Invoice_Grid_Collection método no definido :: joinTable () en /var/www/magento/app/code/local/Myproject/Adminhtml/Block/Sales/Invoice/Grid.php en la línea 41 –
Es porque Mage_Sales_Model_Mysql4_Order_Grid_Collection hereda de Mage_Core_Model_Mysql4_Collection_Abstract, no usa el modelo eav; usted tiene para usar join ($ table, $ cond, $ cols = '*'). La colección de clientes hereda de Mage_Eav_Model_Entity_Collection_Abstract y utiliza joinTable –