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

whereCFWheels が引数で 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 に答える