2017-08-29 38 views
0

我是ColdFusion的新手,并且有关使用从查询函数生成的查询访问cfloop内部变量的有趣问题。ColdFusion - 使用从UDF生成的查询的cfloop中的引用变量

我知道我可以创建一个变量,将查询函数的结果赋值给变量,然后遍历包含查询结果的变量并使用赋给循环内部查询属性的变量名访问数据,如下所示:如下:

<cfscript> 
    q = createObject("component", "cfc.myDBquery"); 
    result = q.myQuery(); 
</cfscript>  

<cfloop query="result"> 
    <cfoutput># result.MY_DATA #</cfoutput> 
</cfloop> 

然而,考虑这个例子:

<cfscript> 
    q = createObject("component", "cfc.myDBquery"); 
</cfscript> 

<cfloop query="#q.myQuery()#"> 
    <cfoutput># ???.MY_DATA #</cfoutput> 
</cfloop> 

其他比只使用从查询中列名(如MY_DATA)输出的数据,我将如何去引用这个特定的查询时输出循环中的数据?

FWIW,Adobe公司表示这种类型的文档中的场景,但是无法显示使用这种方法的循环内输出数据:

https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-tags/tags-j-l/cfloop-looping-over-a-query.html

我知道我是一个有点神经质的尝试从我的代码中删除一行,我只是好奇,如果这是可能的,而坚持最佳实践。

+0

对于查询范围“最佳实践”,请参阅以下主题:[我必须在ColdFusion中查询输出的范围](https:// stackoverflow。COM /问题/ 10709193/DO-具备对范围查询,输出中的ColdFusion)。 – Twillen

回答

-1

我相信有两种可能性。首先,遍历查询时的ColdFusion不需要范围,使你可以只引用您从查询需要像这样的字段名称:

<cfloop query="#q.myQuery()#"> 
<cfoutput>#MY_DATA#</cfoutput> 
</cfloop> 

知道非作用域变量引起混乱和愤怒,我相信你可以引用函数调用中原始查询的名称。举例来说,如果你的“更改为MyQuery()函数是一样的东西:

<cffunction name="myQuery"> 
<cfquery datasource="myDS" name="myQry"> 
    SELECT * FROM Names 
</cfquery> 
<cfreturn myQry> 
</cffunction> 

那么你可以参考 'myQry',像这样:

<cfloop query="#q.myQuery()#"> 
<cfoutput>#myQry.MY_DATA#</cfoutput> 
</cfloop> 
+0

Upvoted引起混乱和愤怒。 –

+1

Downvoted引起混乱和愤怒。此代码需要进行一些严格的重构 –

+0

如果函数正确地使用var/local作用域,则不能引用原始查询的名称。 – Twillen

1

这是一个漫长格式化评论。这里:

<cfscript> 
    q = createObject("component", "cfc.myDBquery"); 
    result = q.myQuery(); 
</cfscript> 

创建该对象使myQuery()函数可用。它并没有真正运行它。你也许可以做到这一点:

result = createObject("component", "cfc.myDBquery").myQuery(); 

接下来,既然你问的最佳做法,不这样做:

<cfloop query="result"> 
    <cfoutput># result.MY_DATA #</cfoutput> 
</cfloop> 

您是通过每一次循环中执行CFOUTPUT标签。相反,这样做:

<cfoutput> 
<cfloop query="result"> 
    #result.MY_DATA # 
</cfloop> 
</cfoutput> 

或本

<cfoutput query="result"> 
#MY_DATA# 
</cfoutput> 

这就像一个循环。其他有关最佳实践的评论仅仅是意见。其中一个就是可读代码是很好的代码。