index - coldfusion cfloop struct
Cómo obtener un nombre de atributo dinámico en cfloop sobre consulta en ColdFusion (1)
<cfloop query="qryResult">
<cfset MyAttr="autoid" />
<cfoutput>
Test 1: #qryResult.autoid# <br/> <!--- succeeds --->
Test 2: #qryResult[MyAttr][qryResult.CurrentRow]# <br/> <!--- succeeds --->
</cfoutput>
</cfloop>
CurrentRow
está implícito en la sintaxis literal ( query.col
). Está vinculado al índice de <cfloop query="...">
/ <cfoutput query="...">
(o 1 cuando se usa fuera de un bucle).
Mencionándolo explícitamente es necesario en la sintaxis de "índice de matriz" ( query[col][row]
), porque query[col]
solo devuelve el objeto de columna (que es el "tipo complejo" al que hace referencia el error).
Efecto secundario: puede usar esto para acceder aleatoriamente a un resultado de consulta fuera de un bucle (es decir, como una matriz multidimensional). Una vez que sepa los números de las filas que le interesan, puede acceder a las filas directamente.
Estoy dentro de un cfloop
sobre una consulta. Quiero obtener un atributo, pero no sabré qué será ese atributo hasta el tiempo de ejecución. El uso de #qryResult[MyAttr]#
falla con el error "Los tipos de objetos complejos no se pueden convertir a valores simples". ¿Cuál es la sintaxis para hacer esto?
Aquí hay un ejemplo simplificado:
<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>