Como obter um nome de atributo dinâmico no CFLOOP sobre a consulta em Coldfusion

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

  •  24-09-2019
  •  | 
  •  

Pergunta

Estou dentro de um cfloop sobre uma consulta. Quero obter um atributo, mas não saberei qual será esse atributo até o tempo de execução. Usando #qryResult[MyAttr]# falha com o erro "Os tipos de objetos complexos não podem ser convertidos em valores simples". Qual é a sintaxe para fazer isso?

Aqui está um exemplo 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>
Foi útil?

Solução

<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 na sintaxe literal (query.col). Está ligado ao índice de <cfloop query="...">/<cfoutput query="..."> (ou 1 quando usado fora de um loop).

Mencionar isso explicitamente é necessário na sintaxe "índice de matriz" (query[col][row]), Porque query[col] por si só retorna o objeto da coluna (que é o "tipo complexo" ao qual o erro se refere).

Efeito colateral: você pode usar isso para acesso aleatório a um resultado de consulta fora de um loop (ou seja, como uma matriz multidimensional). Depois de conhecer os números das linhas que lhe interessam, você pode acessar as linhas diretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top