当我过滤时,magento网格找不到列

时间:2011-12-09 00:10:39

标签: magento magento-1.4

我有一个自定义模块,它有自己的网格。我输入网格的一个字段是与条目关联的记录(笔记)计数。它运行正常并显示网格中的计数,它也很好,但是当我过滤时,我收到一条消息,说它无法找到列。

这是错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'note_count' in 'where clause'

这是代码

class Ssi_Crm_Model_Mysql4_Quote_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{

    protected function _construct()
    {
        $this->_init('crm/quote');
    }

    protected function _initSelect()
    {
        parent::_initSelect();
        $this->_joinUserSet();
        return $this;
    }

    protected function _joinUserSet()
    {
        $this->getSelect()
         ->columns("(SELECT COUNT(note) FROM mage_crm_notes WHERE entity_id = main_table.quote_id AND entity_type = 'quote') as note_count")
            ->join(
                array('user'=>$this->getTable('admin/user')),
                'main_table.user_id=user.user_id',
                array('username' => 'user.username', 'email' => 'user.email'));


        return $this;

    }

2 个答案:

答案 0 :(得分:1)

Chris,你不能在mySql Where子句中使用别名,这就是你在尝试过滤结果时遇到错误的原因。这不是mySql错误,但在http://bugs.mysql.com/bug.php?id=1505

上看到类似的查询

说你的sql是......

SELECT field1,field2,(SELECT COUNT(note)FROM mage_crm_notes WHERE entity_id = main_table.quote_id AND entity_type ='quote')note_count FROM mage_crm

你会得到预期的三列......

:field1:field2:note_count:

但你不能......

SELECT field1,field2,(SELECT COUNT(note)FROM mage_crm_notes WHERE entity_id = main_table.quote_id AND entity_type ='quote')as note_count FROM mage_crm WHERE note_count> 5

因为你会在'where子句'错误中得到未知列'note_count'。

根据您的过滤方式,您可以使用HAVING子句。通过StackOverflow搜索类似的查询(例如Can you use an alias in the WHERE clause in mysql?

答案 1 :(得分:0)

处理此问题的一种方法(必须有其他方法)是使用集合而不是查询,以便它知道如何正确过滤。

而不是getSelect()->columns()尝试addExpressionAttributeToSelect()

$this->addExpressionAttributeToSelect('note_count',
    '(SELECT COUNT(note) FROM mage_crm_notes WHERE entity_id = main_table.quote_id AND entity_type = "quote")',
    ''
)
->joinTable(
    array('user'=>'admin/user'),
    'user_id=user_id',
    array('username' => 'user.username', 'email' => 'user.email')
);

如果不使用EAV集合,实现与addExpressionAttributeToSelect()相同效果的难看方式是:

$this->_map['fields']['note_count'] = '(SELECT COUNT(note) FROM mage_crm_notes WHERE entity_id = main_table.quote_id AND entity_type = "quote")';