Magento - Как использовать функцию JoinTable в EE 1.9 - PullRequest
5 голосов
/ 29 июня 2011

У нас возникла проблема после обновления до 1.9.1 EE magento. В нестандартном сценарии мы использовали таким способом соединение с другой таблицей, и оно всегда работало нормально.

$collection->joinTable('sales_flat_order_item','order_id=entity_id', array('sku', 'qty_ordered', 'qty_invoiced', 'udropship_vendor') , 'sales_flat_order_item.udropship_vendor="'.$this->vendorid.'"', 'right');
$collection->groupByAttribute(array('entity_id')); 

Но после обновления мы получили сообщение об ошибке: Неустранимая ошибка: вызов неопределенного метода Mage_Sales_Model_Mysql4_Order_Collection :: joinTable ().

Кто-нибудь знает, что делать?

1 Ответ

3 голосов
/ 04 июля 2011

Коллекция заказов теперь представлена ​​плоским столом.Таким образом, вы можете добавить фильтры через стандартное свойство Varien_Db_Select этой коллекции:

$select = $collection->getSelect();
$select->join(
        array('o_item' => 'sales_flat_order_item'),
        'o_item.order_id = main_table.entity_id AND o_item.udropship_vendor = "' . $this->vendorid . '"',
        array('sku', 'qty_ordered', 'qty_invoiced', 'udropship_vendor')
    )
    ->group('main_table.entity_id');

Это ответ на этот вопрос.

Однако дополнительно я должен указать на некоторые проблемы во фрагменте кода,Вы задали вопрос:

  1. Лучше переписать эту коллекцию для своего магазина и применить эту логику во вновь созданном публичном методе модели коллекции.Это лучше, чем управлять полями коллекции напрямую.
  2. Идентификатор соединения 'right' никогда не разрешался для присоединения к таблицам коллекции EAV.Внутренне, как неизвестный идентификатор, он был сопоставлен с «внутренним соединением».Это очень отличается от возможного предполагаемого «правого внешнего соединения».Стоит ли переписывать логику?Или «внутреннее соединение» действует как задумано?
  3. Поля 'sku', 'qty_ordered', 'qty_invoiced' неоднозначны.Они не являются надежными, так как они взяты из неизвестного элемента заказа (или даже из других элементов), который был присоединен к заказу по условию 'udropship'.
  4. Возможно, вам следует заключить '$ this->vendorid ', если это строка.Или приведите его к int, если оно целое.Не безопасно просто заключать идентификатор поставщика в строку и заключать его в двойные кавычки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...