2012-04-17 17 views
0
protected function _prepareCollection() 
{ 
    $collection = Mage::getResourceModel($this->_getCollectionClass()); 
    $collection->getSelect()->join('sales_flat_order_address', 'main_table.entity_id = sales_flat_order_address.parent_id',array('company')); 
    $this->setCollection($collection); 
} 

上記のコードを使用して、注文リストグリッドに会社フィールドを追加します。 それはたぶん、内側ではなく、参加してみてください1038「と同じIDを持つ項目(Mage_Sales_Model_Order)は 『Magento Grid新しい列を追加

答えて

0

を』既に存在している」を示しています。また

$collection->getSelect()->joinInner(
    array(
     'order_address' => 'sales_flat_order_address' 
    ), 
    'order_address.parent_id = main_table.entity_id' 
); 

は、あなたのSQLをエコーし​​、何を収集リターンを参照してください。データベースでそのsqlを実行してみてください。これはあなたが間違っていることを理解するのに役立ちます。

echo $collection->getSelect()->__toString(); 

グリッドに列を追加するだけでは不十分です。列を追加する必要があります_prepareColumns()

EDIT: 実際には、それについて考えてみると、おそらく内側の結合があなたを助けません。問題は、sales_flat_order_addressにはすべてのparent_idに複数のエントリが含まれているため、GROUP BYまたはSELECT DISTINCTを使用して重複を考慮する必要があることです。

$collection->getSelect()->joinInner(
    array(
     'order_address' => 'sales_flat_order_address' 
    ), 
    'order_address.parent_id = main_table.entity_id' 
)->group(array('entity_id', 'parent_id')); 

それは完璧ではないですが、1件の注文が多くのアドレスを持っているとして、あなたが何をしようとしているが、本質的に不完全である。このような何かを試してみてください。代わりに、請求先住所のみ、または配送先住所のみで明示的に参加することができます。

+0

それはうまく動作しますが、今は私は請求書のグリッドに小さな問題があります、私は以下の答えの詳細を言及しています。 – p4pravin

関連する問題