3

Grid.phpファイルに次のコードがあります。

function _prepareCollection () {
$collection = Mage::getResourceModel($this->_getCollectionClass());
$collection->getSelect()->joinLeft(
    array('sfog' => 'sales_flat_order_grid'),
    'main_table.entity_id = sfog.entity_id',
    array('sfog.shipping_name','sfog.billing_name')
);
$collection->getSelect()->joinLeft(
    array('sfo'=>'sales_flat_order'),
    'sfo.entity_id=main_table.entity_id',
    array(
        'sfo.customer_email',
        'sfo.weight',
        'sfo.discount_description',
        'sfo.increment_id',
        'sfo.store_id',
        'sfo.created_at',
        'sfo.status',
        'sfo.base_grand_total',
        'sfo.grand_total'
    )
);

テーブルsales_order_itemも追加したいのですが、このテーブルを追加すると、次のエラーが発生します。

同じID「119」のアイテム(Mage_Sales_Model_Order)がすでに存在します

とにかくこれの周り?

4

4 に答える 4

5

あなたがsoi意味で参加していると仮定するとsales_order_item、group by soi.item_iddo

$collection->getSelect()->group('soi.item_id');
于 2012-06-06T09:39:16.120 に答える
4

sales_flat_order_item テーブルの entity_id 列をコレクションの entity_id 列にする必要があります。entity_id列の競合を避けるために、main_table クラスの entity_id 列の名前も変更する必要があります。

$collection->getSelect()->joinLeft(
   array('sfoi' => 'sales_flat_order_item'),
   'sfoi.order_id=sfo.entity_id', 
   array(
      'entity_id' => 'sfoi.item_id',  // Re-assign entity_id column
      'main_table_entity_id' => 'main_table.entity_id'  // Rename original entity_id column
   )
)
于 2012-08-02T20:45:54.787 に答える
2

どうやら sales_order_item と結合すると、注文ごとに複数の行が返されるようになり (驚くことではありません)、Magento は行データを注文専用のコレクションにロードしようとしています。そのチェックは、表示されるエラーを生成しています。

これを修正するには、次のことができます。

  • コレクション クラスを「sales/order_item_collection」に変更します。これにより、注文アイテムごとに 1 つの行が許可されます。

-また-

  • sales_order_item と結合するのではなく、各注文から一連の注文アイテムを取得します。getItemsCollection()
于 2012-06-08T23:28:20.130 に答える
1

これは、レコードを識別するために一意idである、として使用される自動増分値が原因です。

于 2012-06-04T16:11:56.783 に答える