‘cfloop query’ aninhadas

Uma pessoa me perguntou o porque desse código não funcionar, ou melhor, funcionar parcialmente, enviando qNews.RecordCount * qMail.RecordCount (o que é o correto) emails, mas APENAS para o PRIMEIRO resultado da query qNews. Em outras palavras: ele não vai para o segundo registro da query qNews.

<cfloop query="qNews">
<cfloop query="qMail">
<cfmail type="html" from="#form.remetente#"
to="#qMail.email#" subject="#qNews.titulo#">
#qNews.msg#
</cfmail>
</cfloop>
</cfloop>

Eu sinceramente não sei porque (bug?). A lógica está correta e se efetuarmos o loop em cima de uma lista (por exemplo) ao invés da query, funciona normalmente.

A solução que dei foi a seguinte:

<cfloop query="qNews">
<cfloop query="qMail">
<cfmail type="html" from="#form.remetente#"
to="#qMail.email#" subject="#qNews.titulo[qNews.CurrentRow]#">
#qNews.msg[qNews.CurrentRow]#
</cfmail>
</cfloop>
</cfloop>

Mas ainda sim recomendei seriamente que fizesse UMA query apenas, evitando usar cfloops aninhados desnecessariamente.

Alguém já viu algo parecido?


4 Comments on “‘cfloop query’ aninhadas”

  1. Piruca disse:

    realmente estranho!

  2. Isso é um “bug” já manjado do CF desde sei lá que versão (daí eu achar que eles não consideram isso um bug). O lance é realmente reorganizar o código ou salvar os valores do loop “de fora” que você vai precisar em variáveis temporárias.

  3. Éver disse:

    Não seria algum erro no controle do RECORDCOUNT ??

  4. Emanuel disse:

    Alguem sabe se esse “bug” foi corrigido no CFMX 7 ou continua valendo…