我在尝试在cfwheels的findall()方法中使用SQL函数时遇到了问题。
<cfset currencyInfo= model('pricelist').findAll(select="currencyid,name",where="YEAR(startDate)=#params.year#")>
这里令人困惑的是,在同一语句的选择子句中使用SQL函数时,它就像魅力一样。
<cfset currencyInfoTest= model('pricelist').findAll(select="currencyid,name,YEAR(startDate) AS Year",where="id=5")>
我猜CFWHEELS可能仅在"选择"子句中处理列映射,而不是在Whewher子句中计算或操作的语法。
我需要在上述内容中使用一些SQL功能。有什么想法吗?
您在假设CFWHEELS不允许where
参数中不允许SQL函数的假设正确。它可以解析属性名称的字符串,以便可以将它们映射到数据库中的列,并且还将<cfqueryparam>
绑定应用于传递的值。但是它无法将调用拨打到SQL函数。
但是,您可以根据所需的SQL函数创建一个计算的属性,并与之查询。
在models/PriceList.cfc
中:
function init() {
property(name="startDateYear", sql="YEAR(pricelists.startdate)";
}
在您的findAll
电话中:
currencyInfo = model('pricelist').findAll(select="currencyid,name", where="startDateYear=#params.year#");