2014-01-21 31 views
3

我在嘗試在CfWheels的findAll()方法的where子句中使用SQL函數時遇到了一個問題。CFWheels:在WHERE子句中使用SQL函數?

<cfset currencyInfo= model('pricelist').findAll(select="currencyid,name",where="YEAR(startDate)=#params.year#")> 

的困惑在這裏的是,雖然同樣語句的SELECT子句中使用SQL函數,它就像一個魅力。

<cfset currencyInfoTest= model('pricelist').findAll(select="currencyid,name,YEAR(startDate) AS Year",where="id=5")> 

我猜CFWheels可能在SELECT子句中的where子句中處理列映射,而不是任何計算或操作的語法。

我需要在上面的where子句中使用一些sql函數。有任何想法嗎?

+0

一般來說,我不知道。在這種特殊情況下,不要。從params.year創建開始日期和結束日期變量,並使用startDate> = params.year的1月1日和startDate 您的查詢將運行得更快。 –

回答

2

你在你的假設,即CFWheels不允許在where參數SQL函數是正確的。它解析屬性名稱的字符串,以便將它們映射到數據庫中的列,並且還將<cfqueryparam>綁定應用於傳入的值。但它無法解析出對SQL函數的調用。

然而,你可以根據你所需要的SQL函數和查詢針對創建calculated property

models/PriceList.cfc

function init() { 
    property(name="startDateYear", sql="YEAR(pricelists.startdate)"; 
} 

在您的通話findAll

currencyInfo = model('pricelist').findAll(select="currencyid,name", where="startDateYear=#params.year#");