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

Die*_*ius 1 coldfusion cfquery coldfusion-11

我正在以谷歌更好的形式进行搜索,以便在coldfusion中对"查询"进行交流,因为我在公司工作的新人,我试图从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>
Run Code Online (Sandbox Code Playgroud)

我的剧本

<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>
Run Code Online (Sandbox Code Playgroud)

我的服务器转储

InstallKit  Native Windows
appserver   Tomcat
productlevel    Developer
productname ColdFusion Server
productversion  11,0,05,293506
rootdir C:\CFusion11\cfusion
Run Code Online (Sandbox Code Playgroud)

我甚至使用getMetaData()我的查询变量qFoo和返回的数组...所以当我尝试使用类似的东西(试图在查询中转换数组?)

cfQuery = createObject("java", "coldfusion.sql.QueryTable").init(qFoo); 
Run Code Online (Sandbox Code Playgroud)

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

Mig*_*l-F 6

您正在运行ColdFusion 11.

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

最初我发布了each()Adobe ColdFusion 11中没有成员函数.Aquitaine在评论中指出它实际上是.我错误地引用了Each()适用于集合的Lucee函数.Each()与此问题相关的功能实际上是ArrayEach()标记功能的脚本版本.这在ColdFusion 11中可用(它实际上是在ColdFusion 10中添加的).对困惑感到抱歉.

文档可能有误.Each()除了在ColdFusion 2018下,我无法使该功能起作用.对于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);
Run Code Online (Sandbox Code Playgroud)

我在TryCF.com上为你创建了一个要点,这样你就可以看到这个代码在运行中,如果你愿意,可以随意使用它.只需单击此处即可运行代码.