わかりましたので、次のように定義されたフィールドを持つデータベース テーブルを用意することで、賢くしようとしています。
(1) id, name, title, datemodified, dateadded
そして、それらを次のようなさまざまな「オブジェクト」に拡張します
連絡表
(2) id, name, title, datemodified, dateadded, sitecode, contactid
また:
記事表
(3) id, name, title, datemodified, dateadded, sitecode, articleid, votes
したがって、(1) がベースになり、(2) と (3) が拡張されることがわかります。
これらのベース フィールドに対してデータベース クエリを実行するベース オブジェクトがあり、次のコードでそれを魔法のように拡張しようとします。
<cfquery name="local.qReturnQuery" datasource="#variables.sDSN#">
SELECT id, name, title, datemodified, dateadded, sitecode, contactid
FROM tbl_#arguments.sPrefix# cb
WHERE 1
<cfif arrayLen(arguments.aExtendedParams) gt 0>
<cfloop from="1" to="#arrayLen(arguments.aExtendedParams)#" index="local.x">
<cfscript>
local.sParamField = arguments.aExtendedParams[local.x][1];
local.sParamValue = arguments.aExtendedParams[local.x][2];
local.sParamType = arguments.aExtendedParams[local.x][3];
local.bParamIsList = arguments.aExtendedParams[local.x][4];
local.sParamCondition = arguments.aExtendedParams[local.x][5];
local.bIsPositive = arguments.aExtendedParams[local.x][6];
</cfscript>
<cfswitch expression="#local.sParamType#">
<cfcase value="integer,boolean" delimiters="true">
#local.sParamCondition#
<cfif local.bParamIsList>
#local.sParamField# <cfif not local.bIsPositive>NOT </cfif>IN (<cfqueryparam cfsqltype="cf_sql_integer" value="#local.sParamValue#" list="true">)
<cfelse>
#local.sParamField# <cfif not local.bIsPositive>!</cfif>= <cfqueryparam cfsqltype="cf_sql_integer" value="#local.sParamValue#">
</cfif>
</cfcase>
<cfcase value="string">
#local.sParamCondition#
<cfif local.bParamIsList>
#local.sParamField# <cfif not local.bIsPositive>NOT </cfif>IN (<cfqueryparam cfsqltype="cf_sql_longvarchar" value="#local.sParamValue#" list="true">)
<cfelse>
#local.sParamField# <cfif not local.bIsPositive>!</cfif>= <cfqueryparam cfsqltype="cf_sql_longvarchar" value="#local.sParamValue#">
</cfif>
</cfcase>
</cfswitch>
</cfloop>
</cfif>
</cfquery>
残念ながら、私の信じられないほどのコードは私のものを無視しているcfswitch
ようで、次のようなクエリを出力します。
SELECT id, name, title, datemodified, dateadded, sitecode, contactid
FROM tbl_contact_thing cb
WHERE 1
私の配列は次のようになります:
arguments.aExtendedParams = [{1="contactid",2="44",3="integer",4="false",5="AND",6="true"}];
次のようになります。
SELECT id, name, title, datemodified, dateadded, sitecode, contactid
FROM tbl_contact_thing cb
WHERE 1
AND contactid = 44
私は何を間違っているのでしょうか(このコードに関して)