Magento Grid添加新列

时间:2012-04-17 12:32:32

标签: magento

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);
}

我使用上面的代码在订单列表网格上添加公司字段。 但它显示“Item(Mage_Sales_Model_Order)具有相同的id”1038“已经存在”

1 个答案:

答案 0 :(得分: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()

中添加该列

编辑: 实际上,考虑到它,内部联接可能不会帮助你。您遇到的问题是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'));

这并不完美,但你想要做的事情本质上是不完美的,因为一个订单有很多地址。另一种方法是仅明确加入帐单邮寄地址,或仅加入送货地址。