queryEach 或 .each() 在 CF 11 上不工作,为什么?

queryEach or .each() not Working at CF 11, Why?

我正在搜索 google 更好的形式以在 coldfusion 中与 "query" 交互,因为我是公司的新人,我正在工作,我试图从 CF

中获得更多

这是我的尝试:

我的模特:

<cffunction hint="Foo" name="Foo" access="public" returntype="query">
    <!--- Argumentos --->
    <cfargument hint="Something" name="ArgComBus" type="string" required="no" default="">
    <cfargument hint="Other thing" name="ArgPar" type="string" required="no" default="">

    <cfscript>
        queryService = new Query();
        queryService.setSql("
            SELECT
                column1,
                column2,
            FROM
                tab_bar
            WHERE
                1=1
                #arguments.ArgComBus#
        ");
        queryService.setDataSource(session.Dsn);

        if(Len(Trim(arguments.ArgPar))){
            Evaluate(arguments.ArgPar);
        }
        queryResult = queryService.execute();
        qBus = queryResult.getResult();
    </cfscript>


    <cfreturn qBus>
</cffunction>

我的脚本

<cfscript>
arrFoo = arrayNew(1);

qFoo = this.Foo(
    ArgComBus = " AND column1 = #variables.bar# ");

// First Attempt - The each method was not found.
qFoo.each(function (foo) {
    arrFoo.append(foo);
});

// Second Attempt - Variable QUERYEACH is undefined.
queryEach(qFoo, function (foo) {
    arrFoo.append(foo);
});

writeDump(arrFoo);
</cfscript>

我的服务器转储

InstallKit  Native Windows
appserver   Tomcat
productlevel    Developer
productname ColdFusion Server
productversion  11,0,05,293506
rootdir C:\CFusion11\cfusion

我什至在我的查询变量 qFoo 上使用了 getMetaData() 并且 return 那是数组...所以当我尝试使用类似的东西时(试图在查询中转换数组?)

cfQuery = createObject("java", "coldfusion.sql.QueryTable").init(qFoo); 

.each()queryEach() 相同的答案...我什至尝试使用 arrayEach() 但 return 对象是 coldfusion.sql.QueryTable 而不是数组

您是 运行 ColdFusion 11。

直到 ColdFusion 2016 才添加 queryEach() 功能:

最初我曾发布过 each() 成员函数在 Adob​​e ColdFusion 11 中不可用。Aquitaine 在评论中指出它实际上是。 我错误地引用了Lucee 的 Each() 函数,用于处理集合。本题相关的Each()函数实际上是ArrayEach()标签函数的脚本版本。它在 ColdFusion 11 中可用(它实际上是在 ColdFusion 10 中添加的)。抱歉造成混淆。

文档可能有误。除了在 ColdFusion 2018 下,我无法让该功能作为 Each() 工作。对于 ColdFusion 11,我只能让它作为 ArrayEach().

工作

这里有几个关于如何在 ColdFusion 11 中循环查询的例子(借用自 cfdocs):

// Define our query 
platform = ["Adobe ColdFusion", "Railo", "Lucee"]; 
myQuery = queryNew(" "); 
queryAddColumn(myQuery, "platform", "CF_SQL_VARCHAR", platform); 


// By row index 
for (i = 1; i <= myQuery.recordCount; i++) { 
   writeOutput("<li>#myQuery["platform"][i]#</li>"); 
} 


// By query 
for (row in myQuery) { 
   writeOutput("<li>#row.platform#</li>"); 
}


// By arrayeach 
writeOutput("<h3>By arrayeach:</h3>");
function printArray(vendor, index)
{
    writeOutput("<li>#vendor#</li>");
}
arrayEach(platform,printArray);

我在 TryCF.com 上为您创建了一个要点,这样您就可以看到这段代码的运行情况,如果您愿意,可以尝试一下。 Just click here to run the code.