【问题标题】:CFWheels: Using SQL Functions in WHERE clause?CFWheels:在 WHERE 子句中使用 SQL 函数?
【发布时间】:2014-12-01 03:26:58
【问题描述】:

我在 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 函数。有什么想法吗?

【问题讨论】:

  • 一般来说,我不知道。在这种特殊情况下,不要。从 params.year 创建开始和结束日期变量,并使用 startDate >= params.year 的 1 月 1 日和 startDate

标签: mysql coldfusion cfwheels


【解决方案1】:

您的假设是正确的,即 CFWheels 不允许在 where 参数中使用 SQL 函数。它解析字符串中的属性名称,以便将它们映射到数据库中的列,并将&lt;cfqueryparam&gt; 绑定应用于传入的值。但它无法解析对 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#");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2018-05-17
    相关资源
    最近更新 更多