Как выбрать определенные поля с псевдонимами с помощью joinTable или joinField в Magento

Я хочу предварительно отфильтровать * данные в сетке счетов, видимой в административной панели Magento.

Здесь - это вопрос, который я задавал ранее, и этот вопрос связан с решением, представленным для этого, поэтому он может служить хорошим объяснением.

Итак, я изменяю метод Mage_Adminhtml_Block_Sales_Invoice_Grid :: _ prepareCollection так что он сначала выбирает клиента, указанного вошедшим в систему администратором. Затем он будет получать заказы от этих клиентов (в идеале только идентификаторы заказов). Затем присоедините эту коллекцию к sales / order_invoice_grid , чтобы получить счета-фактуры, которые будут отображаться для этого администратора.

На основе последнего ответьте и используя эти документы, Вот 3 способа, которыми я пытался присоединиться к этой информации: (Пример кода 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('*'));

Когда я делаю это, я вижу следующую ошибку:

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()

Если я удалю второй вызов joinTable, приведенный выше код будет работать, но он это не то, что я хочу.

Другой метод, который я пробовал, - это следующий код:

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

Здесь ошибка появляется во второй строке, где я на самом деле пытаюсь создать псевдоним для поля order.entity_id, чтобы оно не конфликтовало с таблицы счетов entity_id. Однако это приводит к ошибке типа:

Item (Mage_Customer_Model_Customer) где я фактически пытаюсь использовать псевдоним поля order.entity_id, чтобы он не конфликтовал с таблицами счетов entity_id. Однако это приводит к ошибке типа:

Item (Mage_Customer_Model_Customer) где я фактически пытаюсь использовать псевдоним поля order.entity_id, чтобы он не конфликтовал с таблицами счетов entity_id. Однако это приводит к ошибке типа:

Item (Mage_Customer_Model_Customer) с тем же идентификатором "1" уже существуют

Мне нужны только идентификаторы заказа, чтобы я мог получать связанные счета, что предполагает, что я также могу использовать функцию joinField, которую я пробовал следующим образом:

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

Но она дает мне следующее ошибка:

Элемент (Mage_Customer_Model_Customer) с тем же идентификатором "1" уже существует

Я ищу решение, которое объединяет счета-фактуры клиентов->.


Под предварительным фильтром я подразумеваю, что данные, перечисленные в таблице, являются фильтруется еще до того, как что-либо будет представлено в сетке.


Хорошо, теперь мой код выглядит так:

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

И я получаю следующую ошибку:

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'

9
задан Community 23 May 2017 в 12:31
поделиться