Как получить динамическое имя атрибута в cfloop по запросу в ColdFusion - PullRequest
6 голосов
/ 06 апреля 2010

Я нахожусь внутри cfloop над запросом. Я хочу получить атрибут, но я не буду знать, каким будет этот атрибут до времени выполнения. Использование #qryResult[MyAttr]# завершается с ошибкой «Сложные типы объектов не могут быть преобразованы в простые значения». Какой синтаксис для этого?

Вот упрощенный пример:

<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>

1 Ответ

13 голосов
/ 06 апреля 2010
<cfloop query="qryResult">
  <cfset MyAttr="autoid" />
  <cfoutput>
   Test 1: #qryResult.autoid# <br/>  <!--- succeeds --->
   Test 2: #qryResult[MyAttr][qryResult.CurrentRow]# <br/> <!--- succeeds --->
  </cfoutput>
</cfloop>

CurrentRow подразумевается в буквальном синтаксисе (query.col).Он привязан к индексу <cfloop query="..."> / <cfoutput query="..."> (или 1 при использовании вне цикла).

Явное упоминание этого необходимо в синтаксисе «индекса массива» (query[col][row]), потому что *Только 1009 * возвращает объект столбца (который является «сложным типом», к которому относится ошибка).

Побочный эффект: Вы можете использовать это для произвольного доступа к результату запроса вне цикла (то есть как мультимассив).Как только вы узнаете номера строк, которые вас интересуют, вы можете получить доступ к строкам напрямую.

...