2015-04-14 52 views
0

以下代碼允許向訂單/銷售頁面添加一列,其中顯示送貨方式爲包含所有送貨承運人的送貨說明。Magento - 完整性約束違規:1052 - 運輸方法

_prepareCollection

$collection->getSelect()->join('sales_flat_order', 'main_table.entity_id = sales_flat_order.entity_id',array('shipping_description')); 

_prepareColumn

$this->addColumn('shipping_method', array(
'header' => Mage::helper('sales')->__('Shipping Method'), 
'index' => 'shipping_description', 
'filter_index' => 'main_table.status', 
)); 

的送貨方式似乎完美后,我編譯的一切。現在,當我嘗試將訂單由prcessing排序,並砸在搜索談到這個錯誤:

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'status' in where clause is ambiguous, query was: SELECT COUNT(*) FROM `sales_flat_order_grid` AS `main_table` INNER JOIN `sales_flat_order` ON main_table.entity_id = sales_flat_order.entity_id WHERE (status = 'processing') 

一些研究,這意味着有當表進行接合的雙重身份之後,現在怎麼創建一個alians從這個以及如何應用它。此外,如果有人知道過濾/按此列排序的方式會很棒。

PS。該文件位於: 應用程序/代碼/本地/法師/ Adminhtml /座/銷售/訂單

編輯:現在想弄清楚如何選擇下拉列表基於數據庫中的值來創建。這裏是我試圖去上班代碼:您需要使用自定義渲染

protected function _getAttributeOptions($attribute_code) 
    { 
     $attribute = Mage::getModel('sales/order')->getAttribute('shipping_description', $attribute_code); 
     $options = array(); 
     foreach($attribute->getSource()->getAllOptions(true, true) as $option) { 
      $options[$option['value']] = $option['label']; 
     } 
     return $options; 
} 

回答

1

:在Grid.php

$this->addColumn('shipping_method', array(
    'header' => Mage::helper('sales')->__('Shipping Method'), 
    'renderer' => 'Vehence_Module_Block_Adminhtml_Block_Sales_Order_Desc', 
    'type' => 'options', 
    'options' => Vehence_Module_Block_Adminhtml_Block_Sales_Order_Desc::getDeliveryArray(), 
    )); 

private static $_deliveryGroups = array(); 

public static function getDeliveryArray() { 
if (count(self::$_deliveryGroups) == 0) { 
    $delivery_group = new Mage_Shipping_Model_Group(); 
    $delivery_groups = $delivery_group->getColection()->toOptionHash(); 
    self::$_deliveryGroups = $delivery_groups; 
} 
return self::$_deliveryGroups; 
} 

和附加價值與該爲你的新領域。然後在renderer方法中你有orderId。使用該ID,您可以實例化訂單對象並獲取並輸出您喜歡的任何字段。

下面是一個例子:https://magento.stackexchange.com/questions/62856/how-to-get-latest-order-comment-on-the-order-grid-column/62859#62859

class Vendor_Module_Block_Renderer_Shipping extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract 
{ 
    public function render(Varien_Object $row) 
    { 
     $orderId = $row->getId(); 
     $order = Mage::getModel('sales/order')->load($orderId); 
     return $order->getData('shipping_description'); 
    } 
} 

以下方法(與改寫更好)補充一點:

$this->addColumn('history', array(
    'header' => Mage::helper('sales')->__('History status'), 
    'type' => 'text', 
    'renderer' => new Vendor_Module_Block_Renderer_Shipping() 
)); 

upd.1

所以... 我沒有應用任何過濾器到我的解決方案。問題在於收集。從外觀上看,它看起來很好,但所有的過濾器都應用了不包含必要過濾區域的集合。因爲我拒絕了我的解決方案。

因爲我認爲你的解決方案對於這個目的好得多,我決定修復它。我爲該模塊創建了git存儲庫。它應該工作。檢查:https://github.com/zhartaunik/AddField

希望這將有助於

+0

你能否詳細說明如何創建這個定製的渲染,我不知道有關文件的管理在這方面,如果我可以在grid.php或外部類中創建此 - 在那裏將它放置。我真的不想創建一個模塊。 – damek132

+0

已更新。我不建議你重寫或編輯核心文件。更好地創建新模塊。 – zhartaunik

+0

不知道你是否注意到,但我複製了核心文件並使用本地文件夾中的相同文件: app/code/local/Mage/Adminhtml/Block/Sales/Order – damek132

0

您需要添加額外的陣列選項來解決這個問題,即filter_index

$this->addColumn('status', array(
     'header' => Mage::helper('sales')->__('Status'), 
     'index' => 'status', 
     '**filter_index' => 'main_table.status**', 
     'type' => 'options', 
     'width' => '70px', 
     'options' => Mage::getSingleton('sales/order_config')->getStatuses(), 
)); 
相關問題