Cómo obtener un nombre de atributo dinámico en cfloop sobre consulta en ColdFusion

StackOverflow https://stackoverflow.com/questions/2581394

  •  24-09-2019
  •  | 
  •  

Pregunta

Estoy dentro de un cfloop durante una consulta. Quiero conseguir un atributo, pero no voy a saber lo que ese atributo será hasta el tiempo de ejecución. Usando #qryResult[MyAttr]# falla con el error "tipos de objetos complejos no pueden ser convertidos a valores simples." ¿Cuál es la sintaxis para hacer esto?

Este es 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>
¿Fue útil?

Solución

<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ícita en la sintaxis literal (query.col). Está ligado al índice de <cfloop query="..."> / <cfoutput query="..."> (o 1 cuando se utiliza fuera de un bucle).

mencionarla explícitamente es necesario en la sintaxis "índice de matriz" (query[col][row]), porque query[col] solo devuelve el objeto de columna (que es el "tipo complejo" el error se refiere a).

Efecto secundario: Se puede utilizar este para el acceso aleatorio a un fuera resultado de la consulta de un bucle (es decir, como una matriz multidimensional). Una vez que conoce los números de las filas que le interesan, puede acceder directamente a las filas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top