我的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)已存在
无论如何?
答案 0 :(得分:5)
假设您加入soi
表示sales_order_item
,请按soi.item_id
分组
$collection->getSelect()->group('soi.item_id');
答案 1 :(得分:4)
您必须使sales_flat_order_item表的entity_id列成为集合的entity_id列。您还必须重命名main_table类的entity_id列,以避免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
)
)
答案 2 :(得分:2)
显然加入sales_order_item导致每个订单返回多行(这并不奇怪),Magento正在尝试将行数据加载到专门用于订单的集合中,其中包含检查以确保每个订单仅发生一次。该检查产生了您看到的错误。
要解决此问题,您可以:
-OR -
getItemsCollection()
答案 3 :(得分:1)
这是因为自动增量值,用作id
,唯一来识别记录