2017-08-29 1 views
0

ColdFusionを初めてお使いで、クエリ関数から生成されたクエリを使用してcfloop内の変数にアクセスする際に興味深い質問があります。ColdFusion - UDFから生成されたクエリーを使用するcfloopの参照変数

変数にクエリ関数の結果を代入し、クエリ結果を含む変数をループし、ループ内のクエリ属性に与えられた変数名を使ってデータにアクセスすることができます次の:

<cfscript> 
    q = createObject("component", "cfc.myDBquery"); 
    result = q.myQuery(); 
</cfscript>  

<cfloop query="result"> 
    <cfoutput># result.MY_DATA #</cfoutput> 
</cfloop> 

しかし、この例を考えてみます。ただ、クエリ(例えばMY_DATA)から列名を使用してデータを出力する以外

<cfscript> 
    q = createObject("component", "cfc.myDBquery"); 
</cfscript> 

<cfloop query="#q.myQuery()#"> 
    <cfoutput># ???.MY_DATA #</cfoutput> 
</cfloop> 

、どのように私はときに、この特定のクエリを参照しに行きますか出力ループ内のデータ?

FWIW、Adobeがしかし、この方法を使用して、ループの内部データを出力表示するために失敗し、そのドキュメントのこのタイプのシナリオを示しています

https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-tags/tags-j-l/cfloop-looping-over-a-query.html

私は私がしようとするために少し神経症いるよ知っていますコードから1行を削除するには、ベストプラクティスを順守しながらこれが可能であるかどうか不思議です。

+0

クエリスコープ「ベストプラクティス」については、このスレッドを参照してください。[ColdFusionでクエリ出力をスコープする必要がありますか(https:// stackoverflow。com/questions/10709193/do-i-have-to-scope-query-output-in-coldfusion)が含まれています。 – Twillen

答えて

-1

私は2つの可能性があると信じています。クエリをループするときに、ちょうどそのようなクエリから、あなたが必要とするフィールド名を参照することができるようにまず、ColdFusionはスコープを必要としない:非スコープの変数を知る

<cfloop query="#q.myQuery()#"> 
<cfoutput>#MY_DATA#</cfoutput> 
</cfloop> 

は混乱と怒りを引き起こし、私はあなたを信じています関数呼び出しから元のクエリの名前を参照できます。たとえば、あなたの 'MYQUERY()' 関数がある場合のようなもの:

<cffunction name="myQuery"> 
<cfquery datasource="myDS" name="myQry"> 
    SELECT * FROM Names 
</cfquery> 
<cfreturn myQry> 
</cffunction> 

その後、あなたの缶参照 'myQry' そうのように:

<cfloop query="#q.myQuery()#"> 
<cfoutput>#myQry.MY_DATA#</cfoutput> 
</cfloop> 
+0

混乱と怒りを引き起こすためにアップアップされました。 –

+1

混乱と怒りを引き起こすために下降。このコードは、関数が正常にスコープローカルVAR /である場合は、元のクエリの名前を参照することはできません –

+0

いくつかの深刻な手直しが必要です。 – Twillen

1

これは、長いフォーマットされたコメントです。ここでは:

<cfscript> 
    q = createObject("component", "cfc.myDBquery"); 
    result = q.myQuery(); 
</cfscript> 

オブジェクトを作成すると、myQuery()関数が使用可能になります。それは実際にそれを実行しません。あなたがこれを行うことができるかもしれない:

result = createObject("component", "cfc.myDBquery").myQuery(); 

次に、あなたがについてベストプラクティスを求めているので、これをしない:あなたはcfoutputタグにループを通過するたびに実行されている

<cfloop query="result"> 
    <cfoutput># result.MY_DATA #</cfoutput> 
</cfloop> 

。これは、ループのように振る舞う

<cfoutput> 
<cfloop query="result"> 
    #result.MY_DATA # 
</cfloop> 
</cfoutput> 

またはこの

<cfoutput query="result"> 
#MY_DATA# 
</cfoutput> 

:代わりに、これを行います。ベストプラクティスに関する他のコメントは、単に意見です。私の1つは、読みやすいコードは良いコードだということです。

関連する問題