coldfusion - ColdFusion 在基于脚本的 cfc 函数中使用 if 条件
问题描述
我正在努力提高我的 cfscript 并且无法弄清楚这一点。在基于标签的 CFC 中,我可以执行以下操作:
<cffunction name="querySd" access="public" returnType="query" output="false">
<cfargument name="sd_id" type="numeric" required="No"/>
<cfargument name="sd_code" type="string" required="No"/>
<cfquery name="LOCAL.qrySd" datasource="#variables.dsn#">
SELECT sd_id, sd_code, sd_active, sd_expires, sd_added, sd_dla
FROM sd
WHERE 0=0
<cfif isDefined("ARGUMENTS.sd_id")>
AND sd_id = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ARGUMENTS.sd_id#"/>
</cfif>
<cfif isDefined("ARGUMENTS.sd_code")>
AND sd_code = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#ARGUMENTS.sd_code#" maxlength="20"/>
</cfif>
</cfquery>
<cfreturn LOCAL.qrySd>
</cffunction>
但是,在 cfscript 中尝试类似的方法会引发错误:
public query function querySd( numeric sd_id, string sd_code ){
local.querySd = new Query(datasource = variables.dsn);
if( isDefined('arguments.sd_id') ){
local.querySd.addParam( name = 'sdid', value = arguments.sd_id, cfsqltype = 'cf_sql_int');
};
if( isDefined('arguments.sd_code') ){
local.querySd.addParam( name = 'sdcode', value = arguments.sd_code, cfsqltype = 'cf_sql_varchar', maxlength = '20');
};
local.querySd.setSql('
SELECT sd_id, sd_code, sd_active, sd_expires, sd_added, sd_dla
FROM sd
WHERE 0 = 0
if( isDefined('arguments.sd_id') ){
AND sd_id = :sdid
};
if( isDefined('arguments.sd_code') ){
AND sd_code = :sdcode
};
');
local.qrySd = local.querySd.execute().getResult();
在 cfc 内基于 cfscript 的查询中使用可选参数的正确方法是什么?
解决方案
您可以将查询的一部分放在一个变量中,并在查询字符串中使用它。
local.queryPart = '';
if( isDefined('arguments.sd_id') ){
local.queryPart &= ' AND sd_id = :sdid ';
};
if( isDefined('arguments.sd_code') ){
local.queryPart &= ' AND sd_code = :sdcode ';
};
local.querySd.setSql('
SELECT sd_id, sd_code, sd_active, sd_expires, sd_added, sd_dla
FROM sd
WHERE 0 = 0
#local.queryPart#
');
推荐阅读
- python - 如何根据另一列中的值从另一列中填充一列中的值?
- algorithm - 将函数从递归转换为迭代
- c# - IQueryable 上的 EF Core “InvalidOperationException:InvalidOperationException:Include 已用于非实体可查询”
- django - 为什么我的芹菜任务没有定期执行?
- c++ - 为什么每个类都有隐私但 const 不适用于同一类的对象?
- sql - 使用 PostgreSQL 批量更新同一查询中的多行
- reactjs - 在veracode中扫描package-lock.json是否理想?
- javascript - 打字时Java脚本重量变化
- python-3.x - 我试试这个,不知道如何打开第一个视频。此代码在浏览器中打开搜索
- java - 带有用于从 JSON 转换为类的聚合对象的 Jackon API