簡體   English   中英

在Magento中使用函數會在帶有函數的過濾器中添加反引號。 有沒有什么好的方法可以使這些MySQL函數正常工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM