Мне очень любопытно, почему это происходит. Я столкнулся с этим два раза сейчас, и после тонны поискового запроса/так, я не нашел причин, по которым я действительно понимаю. Суть ее:Вложенные cfloops с меньшим количеством записей, чем внешний контур, вызывают ошибку «индекс массива вне диапазона»
Запрос 1: selectContent (6 записей; нет заготовки/нули и т.д.)
Запрос 2: selectPricing (5 записей; нет заготовки/нули и т.д.)
Выход:
<cfloop query="selectContent">
<section>
#selectContent.h2#
<cfif selectContent.id eq 3>
<cfloop query="selectPricing" group="groupCol">
<table class="pricing">
<thead>
<tr>
<th>#description#</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<cfloop>
<tr>
<td>#selectPricing.description#</td>
<td>#selectPricing.price#</td>
</tr>
</cfloop>
</tbody>
</table>
</cfloop>
</cfif>
#selectContent.content#
</section>
</cfloop>
Это даст следующее сообщение об ошибке: индекс массива вне диапазона: 5
ошибка возникает только когда второй д uery имеет меньше записей, чем первое. По сути, это похоже на то, что первый cfloop берет на себя итерацию цикла из этой второй, и это вызывает проблему, но также, только если у вас есть этот третий сгруппированный cfloop. Весь внутренний cfloop работает, как и в источнике.
Я придумал два способа решения этой проблемы:
- сделать это с cfoutput/группой, но это относительно уродливо, как это означает, что много закрытия cfoutputs из других частей страницы.
- вставьте cfbreak на этом третьем cfloop, если currentRow соответствует номеру записи.
Итак, два вопроса:
Почему это даже происходит?
Должен ли я использовать совершенно другой подход здесь (факт, что поиск в googling/so'ing не находит других с этой проблемой, несомненно, подразумевает, что ...)?
EDIT Я подал это как ColdFusion ошибка на основе обратной связи Адам Камерона ниже. Bug #3820049
У вас есть нет атрибутов на внутреннем теге cfloop, является ли это синтаксисом? – Busches
Да. Это циклически проходит через сгруппированные результаты, т. Е. Если ваш запрос был сгруппирован по полу, который будет возвращать все имена по полу (см. Http://www.bennadel.com/blog/2359-coldfusion-10-using-the-group-attribute -с-cfloop к групповому запроса-rows.htm). Это работает, если у вас его нет в этом первом cfloop (перед сгруппированным).Он должен в основном работать так же, как и cfoutput group, что и использует Адам ниже в качестве обходного пути, и вы можете видеть по существу тот же синтаксис, который там используется. – sckd
* Должен ли я использовать совершенно другой подход здесь? Мне любопытно, почему несколько запросов и вложенных циклов в отличие от одного запроса с JOIN? – Leigh