Как получить динамическое название атрибута в cfloop по запросу в ColdFusion

Я внутри a 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>
6
задан James A Mohler 21 December 2013 в 18:27
поделиться

1 ответ

<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 ). Он привязан к индексу / (или 1 при использовании вне цикла).

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

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

13
ответ дан 8 December 2019 в 18:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: