なぜこれが起こっているのか非常に興味があります。私はこれに2回遭遇しましたが、大量のグーグル/ソーイングの後、実際に理解している理由が見つかりませんでした. その要点:
クエリ 1: selectContent (6 レコード; 空白/null などはありません)
クエリ 2: selectPricing (5 レコード; 空白/null などなし)
出力:
<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>
これにより、次のエラーが発生します: Array index out of range: 5
このエラーは、2 番目のクエリのレコードが最初のクエリよりも少ない場合にのみ発生します。基本的に、最初の cfloop が 2 番目の cfloop からループの反復を引き継ぐように感じられ、これが問題を引き起こしますが、そこに 3 番目のグループ化された cfloop がある場合のみです。ソースにあるように、内側の cfloop 全体が実行されます。
これを解決するために、次の 2 つの方法を考え出しました。
- cfoutput/group でこれを行いますが、これはページの他の部分からの cfoutputs をたくさん閉じることを意味するため、比較的醜いです。
- currentRow が recordcount と一致する場合、その 3 番目の cfloop に cfbreak を貼り付けます。
だから、2つの質問:
なぜこれが起こっているのですか?
ここではまったく異なるアプローチを使用する必要がありますか (グーグル/検索でこの問題を抱えている他の人が見つからないという事実は、確かにそれを暗示しているようです...)?
編集 以下の Adam Cameron のフィードバックに基づいて、これを Coldfusion バグとして提出しました。バグ #3820049