CFWheels: использование функций SQL в предложении WHERE?

Я столкнулся с проблемой при попытке использовать функцию SQL в предложении where метода CfWheels findAll().

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

Сбивает с толку то, что при использовании функции sql в предложении select того же оператора она работает как шарм.

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

Я предполагаю, что CFWheels может обрабатывать сопоставления столбцов только в предложении select, а не какой-либо вычисляемый или управляемый синтаксис в предложении where.

Мне нужно использовать некоторые функции sql в предложении where, как указано выше. Любые идеи?


person Anurag    schedule 21.01.2014    source источник
comment
Вообще говоря, я не знаю. В данном конкретном случае нет. Создайте переменные даты начала и окончания из params.year и используйте startDate ›= 1 января из params.year и startDate ‹ 1 января из params.year + 1. Ваш запрос будет выполняться быстрее.   -  person Dan Bracuk    schedule 21.01.2014


Ответы (1)


Вы правы в своем предположении, что CFWheels не разрешает функции SQL в аргументе where. Он анализирует строку на наличие имен свойств, чтобы сопоставить их со столбцами в базе данных, а также применяет привязки <cfqueryparam> к переданным значениям. Но он не может анализировать вызовы функций SQL.

Однако вы можете создать вычисляемое свойство на основе нужной функции SQL и выполнить запрос. тот.

In models/PriceList.cfc:

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

В вашем findAll звонке:

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