2014-01-21 27 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#");