Я хочу предварительно отфильтровать * данные в сетке счетов, видимой в административной панели 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'