如何在ColdFusion中的cfloop over query中获取动态属性名称

时间:2010-04-05 21:48:16

标签: coldfusion cfloop

我在cfloop内查询。我想获得一个属性,但是直到运行时我才知道该属性是什么。使用#qryResult[MyAttr]#失败并显示错误“复杂对象类型无法转换为简单值”。这样做的语法是什么?

这是一个简化的例子:

<cfquery datasource="TestSource" name="qryResult">
    SELECT * FROM MyTable
</cfquery>

<cfloop query="qryResult">
    <cfset MyAttr="autoid" />
    <cfoutput>
        Test 1: #qryResult.autoid# <br/>  <!--- succeeds --->
        Test 2: #qryResult[MyAttr]# <br/> <!--- fails --->
    </cfoutput>
</cfloop>

1 个答案:

答案 0 :(得分:13)

<cfloop query="qryResult">
  <cfset MyAttr="autoid" />
  <cfoutput>
   Test 1: #qryResult.autoid# <br/>  <!--- succeeds --->
   Test 2: #qryResult[MyAttr][qryResult.CurrentRow]# <br/> <!--- succeeds --->
  </cfoutput>
</cfloop>

CurrentRow隐含在文字语法(query.col)中。它与<cfloop query="..."> / <cfoutput query="...">的索引相关联(在循环外使用时为1)。

在“数组索引”语法(query[col][row])中必须明确提及它,因为query[col]单独返回列对象(这是错误引用的“复杂类型”)。

副作用:您可以使用它来随机访问循环外的查询结果(即作为多维数组)。一旦知道了您感兴趣的行数,就可以直接访问这些行。