Я внутри 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>
<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]
один возвращает объект столбца (который является "сложный тип", к которому относится ошибка).
Побочный эффект: вы можете использовать это для произвольного доступа к результату запроса вне цикла (т.е. как многомерный массив). Как только вы узнаете номера интересующих вас строк, вы сможете напрямую обращаться к ним.