2017-06-30 20 views
0

管理グリッドをフィルタリングして特定の製品の販売履歴を表示しようとしましたが、名前:Magento:SQLSTATE [42S22]:列が見つかりません:1054 'where句'の 'billing_name'列が不明です

protected function _prepareCollection() { 
    $productId = $this->getProduct()->getId(); 
    $ordersId = $this->getOrderIds($productId); 

    $collection = mage::getModel('sales/order') 
       ->getCollection() 
       ->addFieldToFilter('main_table.entity_id', array('in' => $ordersId)) 
       ->join('sales/order_address', '`sales/order_address`.entity_id=billing_address_id', array('billing_name' => "concat(firstname, ' ', lastname)")); 

    $this->setCollection($collection); 
    return parent::_prepareCollection(); 
} 

そしてを課金名前のためのグリッド列を追加するには:

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

ここでは、私が使用しているものです

protected function _prepareColumns() { 

    $this->addColumn('billing_name', array(
     'header' => Mage::helper('AdvancedStock')->__('Bill to Name'), 
     'index' => 'billing_name', 
     'sortable' => true 
    )); 

return parent::_prepareColumns(); 
} 

この列は、製品を含む注文からすべての請求名を正しく返します。名前で列をフィルタリングできません。何か案は?

+0

モデルに課金名を追加しましたが、データベースには追加しませんでしたか? 'sales_flat_order'(または' sales_flat_order_address')テーブルを見ると存在しますか? – CD001

+0

@ CD001私はそれが 'sales_flat_order_address'にあると信じていますが、テーブルをチェックするためにphpMyAdminにアクセスすることはできません – AJ47

答えて

1

magento sales_flat_orderテーブルとsales_flat_order_addressテーブルには、billing_nameカラムがありません。
あなたがそうでなければ、あなたは現在のコレクションでsales_flat_order_gridテーブルをLeftjoinすることができ、このようなbilling_nameを取得するためsales_flat_order_addressの代わりに

$collection = Mage::getModel('sales/order') 
        ->getCollection() 
        ->addFieldToFilter('main_table.entity_id', array('in' => $ordersId)) 
        ->join('sales/order_grid', '`sales/order_grid`.entity_id=main_table.entity_id', array('billing_name' => 'billing_name')); 

をsales_flat_order_gridテーブルを使用することができます。

+0

それはうまくいきました、ありがとう! – AJ47

+0

素晴らしい:)ありがとうございました – Ranipriyanka

関連する問題