我正在使用Magento 1,我正在尝试使用以下代码添加week(created_time)
过滤器:
$week = 37;
$weekCollection = Mage::getModel('module/modle_name')->getCollection()
->addFieldToFilter("week(created_time)", $week);
不幸的是,在整个函数周围添加了反引号,所以我得到了错误
SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'week(created_time)',查询为:SELECT`main_table`。*,SUM(委托)AS`commission_total` FROM`allminiateplus_transaction` AS `main_table` WHERE(`account_id` ='1546')AND(`week(created_time)`='37')GROUP BY周(created_time,1)
Magento 1中是否有合法的方法将MySQL函数应用于列名?
答案 0 :(得分:3)
您必须使用Zend_Db_Expr。 如果magento遇到Zend_Db_Expr,它只会将其解析为字符串,不要以任何方式修改它。
所以它看起来像这样:
$week = 37;
$weekCollection = Mage::getModel('module/modle_name')->getCollection()
->addFieldToFilter(new Zend_Db_Expr("week(created_time)"), $week);
答案 1 :(得分:1)
您需要先添加表达式属性。这是一种基于MySQL函数创建虚拟列的方法。
$week = 37;
$weekCollection = Mage::getModel('module/modle_name')->getCollection()
->addExpressionAttributeToSelect( 'match_week', 'week({{created_time}})', array( 'created_time' => 'created_time' ) )
->addFieldToFilter( 'match_week', $week);