Comment obtenir un nom d'attribut dynamique cfloop sur requête dans ColdFusion

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

  •  24-09-2019
  •  | 
  •  

Question

Je suis à l'intérieur d'un cfloop sur une requête. Je veux obtenir un attribut, mais je sais pas ce que cet attribut sera jusqu'à l'exécution. L'utilisation #qryResult[MyAttr]# échoue avec l'erreur « types d'objets complexes ne peuvent être converties en valeurs simples. » Quelle est la syntaxe pour faire cela?

Voici un exemple simplifié:

<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>
Était-ce utile?

La solution

<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 implicite dans la syntaxe littérale (de query.col). Il est lié à l'indice de <cfloop query="..."> / <cfoutput query="..."> (ou 1 lorsqu'elle est utilisée en dehors d'une boucle).

La mention il est expressément nécessaire dans la syntaxe « index de tableau » (query[col][row]), car query[col] retourne seul l'objet de colonne (qui est du type « complexe » se réfère à l'erreur).

Effet secondaire: Vous pouvez l'utiliser pour l'accès aléatoire à un résultat de requête en dehors d'une boucle (à savoir comme un tableau multidimensionnel). Une fois que vous connaissez les numéros des lignes qui vous intéressent, vous pouvez accéder aux lignes directement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top