Wie ein dynamisches Attributnamen in cfloop über Abfrage in Coldfusion erhalten

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

  •  24-09-2019
  •  | 
  •  

Frage

Ich bin in einer cfloop über eine Abfrage. Ich mag ein Attribut bekommen, aber ich will nicht wissen, was das Attribut erst zur Laufzeit sein wird. Mit #qryResult[MyAttr]# schlägt mit dem Fehler „Komplexe Objekttypen können nicht auf einfache Werte umgewandelt werden.“ Was ist die Syntax für dies zu tun?

Hier ist ein vereinfachtes Beispiel:

<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>
War es hilfreich?

Lösung

<cfloop query="qryResult">
  <cfset MyAttr="autoid" />
  <cfoutput>
   Test 1: #qryResult.autoid# <br/>  <!--- succeeds --->
   Test 2: #qryResult[MyAttr][qryResult.CurrentRow]# <br/> <!--- succeeds --->
  </cfoutput>
</cfloop>

CurrentRow ist implizit in der Literalsyntax (query.col). Es ist verbunden mit dem Index der <cfloop query="..."> / <cfoutput query="..."> (oder 1, wenn sie außerhalb einer Schleife verwendet wird).

explizit Erwähnen ist notwendig in der „Array-Index“ Syntax (query[col][row]), da query[col] allein kehrt das Spaltenobjekt (das ist der „komplexe Typ“ ist der Fehler bezeichnet).

Nebeneffekt: Sie können dies einer Schleife das Ergebnis einer Abfrage außerhalb für den Direktzugriff verwenden (das heißt als ein mehrdimensionales Array). Sobald Sie die Nummern der Zeilen wissen, die Sie interessieren, können Sie die Zeilen direkt zugreifen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top