[英]Using functions in Magento is adding backticks to Filters with functions. Is there a good way to make these MySQL function work?
我正在使用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(commission)AS`commission_total` FROM`affiliateplus_transaction` AS`main_table`其中(`account_id` ='1546')和(`week(created_time)`='37')GROUP BY week(created_time,1)
Magento 1中有合法的方法將MySQL函數應用於列名嗎?
您必須使用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);
您需要首先添加一個表達式屬性。 這是一種基於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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.