Использование псевдонимов столбцов в поле «Таблица заказа клиента»

Я пытаюсь добавить два поля ( Shipping Postcode и Shipping Postcode ) в сеть продаж Magento 1.7CE.

Я делаю это, переопределяя Mage_Adminhtml_Block_Sales_Order_Grid::setCollection(...) чтобы присоединиться к таблице с sales/order_address .

 public function setCollection($collection){ parent::setCollection($collection); $collection->getSelect()->join( array('address_shipping' => $collection->getTable("sales/order_address")), 'main_table.entity_id = address_shipping.parent_id AND address_shipping.address_type = "shipping"', array('postcode') ); $collection->getSelect()->join( array('address_billing' => $collection->getTable("sales/order_address")), 'main_table.entity_id = address_billing.parent_id AND address_billing.address_type = "billing"', array('postcode') ); } 

И Mage_Adminhtml_Block_Sales_Order_Grid::_prepareColumns(...) чтобы добавить столбцы в Sales Grid.

 protected function _prepareColumns(){ $this->addColumn('shipping_postcode', array( 'header' => Mage::helper('sales')->__('Shipping Postcode'), 'index' => 'postcode', )); $this->addColumn('billing_postcode', array( 'header' => Mage::helper('sales')->__('Billing Postcode'), 'index' => 'postcode', )); return parent::_prepareColumns(); } 

Проблема в том, что оба раза мне нужно выбрать поле postcode из таблицы sales/order_address что приводит к ошибке SQL

 SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'postcode' in order clause is ambiguous 

Я попытался использовать псевдоним AS MySQL, чтобы различать два почтовых индекса, изменяя setCollection(...) для передачи array('shipping_postcode'=>'postcode') и array('billing_postcode'=>'postcode') а также изменение _prepareColumns(...) чтобы сказать 'index' => 'shipping_postcode' и 'index' => 'billing_postcode' . Это привело к другой ошибке SQL

 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'shipping_postcode' in 'where clause' 

Как я могу добиться наличия двух столбцов в сетке продаж?

Solutions Collecting From Web of "Использование псевдонимов столбцов в поле «Таблица заказа клиента»"

попробуйте этот первый код

 public function setCollection($collection){ parent::setCollection($collection); $collection->getSelect()->join( array('address_shipping' => $collection->getTable("sales/order_address")), 'main_table.entity_id = address_shipping.parent_id AND address_shipping.address_type = "shipping"', array('address_shipping.postcode as shippingpostcode') ); $collection->getSelect()->join( array('address_billing' => $collection->getTable("sales/order_address")), 'main_table.entity_id = address_billing.parent_id AND address_billing.address_type = "billing"', array('address_billing.postcode as billingpostcode') ); } 

Второй _prepareColumns() здесь,

 protected function _prepareColumns(){ $this->addColumn('shippingpostcode', array( 'header' => Mage::helper('sales')->__('Shipping Postcode'), 'index' => 'shippingpostcode', 'filter_index' => 'address_shipping.postcode' )); $this->addColumn('billingpostcode', array( 'header' => Mage::helper('sales')->__('Billing Postcode'), 'index' => 'billingpostcode', 'filter_index' => 'address_billing.postcode' )); return parent::_prepareColumns(); } 

если вы хотите узнать больше об 'filter_index' , 'filter_index' комментарий в / из этого, а затем попробуйте отсортировать в своей таблице столбец столбца. Вы увидите другой результат. Если вы удалите filter_index , ошибка в сортировке.

Перед return parent::_prepareCollection(); Вы должны создать соединение:

 $collection->getSelect()->joinLeft(array('billing'=>'sales_flat_order_address'), 'main_table.entity_id = billing.parent_id AND billing.address_type="billing"',array('billing.postcode AS bp')); 

И в методе _prepareColumns paste:

 $this->addColumn('bp', array( 'header' => Mage::helper('sales')->__('Billing Postcode'), 'index' => 'bp', 'width' => '60px', 'filter_index' => 'billing.postcode' ));