9

なぜこれが起こっているのか非常に興味があります。私はこれに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

4

1 に答える 1