Come ottenere un nome attributo dinamico in cfloop su query in ColdFusion
-
24-09-2019 - |
Domanda
Sono all'interno di una cfloop
su una query. Voglio ottenere un attributo, ma io non so che cosa attributo sarà fino al runtime. Uso #qryResult[MyAttr]#
con l'errore "tipi di oggetti complessi non possono essere convertiti in valori semplici." Qual è la sintassi per fare questo?
Ecco un esempio semplificato:
<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>
Soluzione
<cfloop query="qryResult">
<cfset MyAttr="autoid" />
<cfoutput>
Test 1: #qryResult.autoid# <br/> <!--- succeeds --->
Test 2: #qryResult[MyAttr][qryResult.CurrentRow]# <br/> <!--- succeeds --->
</cfoutput>
</cfloop>
CurrentRow
è implicita nella sintassi letterale (query.col
). È legata all'indice di <cfloop query="...">
/ <cfoutput query="...">
(o 1 quando usato fuori di un ciclo).
Citando esplicitamente è necessaria la sintassi "array di indici" (query[col][row]
), perché query[col]
solo restituisce l'oggetto colonna (che è il "tipo complesso" l'errore si riferisce a).
Effetto secondario: È possibile utilizzare questo per l'accesso casuale ad un risultato di query fuori di un ciclo (cioè come un array multi-dimensionale). Una volta che si conoscono i numeri delle righe che ti interessano, è possibile accedere direttamente alle righe.