query index cfoutput array coldfusion cfloop

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>