0
$select->joinLeft(
       array('order_table' => $collection->getTable('sales/order')),
       'order_table.entity_id=main_table.entity_id',
       array('admin_user_id' => 'admin_user_id')
);

在导致错误的自定义 magento 模块中

Integrity constraint violation: 1052 Column 'created_at' in where clause is ambiguous

注释掉这段代码允许magento正确运行,代码位于观察者

    public function salesOrderGridCollectionLoadBefore($observer)
    {
        $collection = $observer->getOrderGridCollection();
        $select = $collection->getSelect();
        $select->joinLeft(
           array('order_table' => $collection->getTable('sales/order')),
               'order_table.entity_id=main_table.entity_id',
            array('admin_user_id' => 'admin_user_id')
        );
    }

任何人都可以建议修复,这不是我的代码或我的模块,我不完全理解它所做的一切。

我猜它会在表格中添加一个字段并填充它,然后允许您使用订单页面使用它进行搜索。

提前致谢。-T

4

2 回答 2

0

看看'sfo_created_at' =>'sfo.created_at'哪个将重命名sales_flat_order.created_atsales_flat_order.sfo_created_at(您也可以从选择中删除该字段)

$collection = $observer->getOrderGridCollection();
$collection->getSelect()->joinLeft(
    array('sfo' => 'sales_flat_order'),
    'main_table.entity_id=sfo.entity_id',
    array('sfo_created_at' =>'sfo.created_at', 'sfo.status')
);
于 2013-12-05T17:13:55.193 回答
0

我已经搜索了所有地方,因为我没有得到任何可以帮助我的确切结果。但是现在我知道为什么会发生这种情况。这很简单,因为它说“违反完整性约束:where 子句中的 1052 列 'created_at' 不明确”,这意味着它正在寻找另一个 created_at 字段。因为当我们添加或加入另一个表时,它还有一个名为 created_at 的字段。那么解决这个问题的方法是什么?

有什么想法………………</p>

它很简单,只是告诉 magento created_at 是 main_table 而不是我的自定义表,你怎么能这样做,我会告诉你完整的过程。

步骤 1. 在销售订单 grid.php 文件中找到以下代码

$this->addColumn('created_at', array( 'header' => Mage::helper('sales')->__('Purchased On'), 'index' => 'created_at', 'type' => 'datetime', 'width' => '100px', ));

步骤 2. 在第二步中,只需将代码替换为以下代码。

$this->addColumn('created_at', array( 'header' => Mage::helper('sales')->__('Purchased On'), 'index' => 'created_at', 'type' => 'datetime', 'width' => '100px', 'filter_index' => 'main_table.created_at', ));

你有没有发现我在代码中改变了什么,而不是你,好吧,让我解释一下。在这段代码中,我添加了以下行:

'filter_index' => 'main_table.created_at',

考虑下一行的用途,这里在销售订单网格的 created_at 列中从主集合中找到 created_at。但是我们在集合中得到了两次 created_at。所以我添加了以下行,这个 created_at 是主表sales_flat_order 不是其他表的。

就是这个过程

有关更多信息,您可以访问博客

http://www.webtechnologycodes.com/integrity-constraint-violation-1052-column-created_at-in-where-clause-is-ambiguous/

于 2014-04-17T10:57:23.413 回答