3

我在 CfWheels 的 findAll() 方法的 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 函数。有任何想法吗?

4

1 回答 1

2

您的假设是正确的,即 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#");
于 2014-01-21T23:14:59.717 回答