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

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

4

1 回答 1

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

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

于 2012-04-18T00:13:18.387 回答