ColdFusion ORM EntityLoadで返ってきたデータ出力について

2011.08.18

先日の「ColdFusion ORMを試してみる」の記事で実際にORM_TEST1テーブルからEntityLoad()を使用してデータを取得したまではいいのですが、それを実際にHTMLページとして出力するにはどうしたらいいのか?とちょっと疑問に思ったので、備忘録としてまとめました。

そのままマニュアルを読んでいくとcfscript内での出力方法は掲載されていました。
参考までにcfscript内でどのように記述するかです。

<cfscript> 
    orm_sample = EntityLoad("ORM_TEST1"); 
    testdata = orm_sample.getorm_test2(); 
    WriteOutput("<b>" & orm_sample.getname() & " " & orm_sample.getdivision() & " " & 
    orm_sample.getphone() & "</b> has " & ArrayLen(orm_sample) & "<br>"); 
    if (ArrayLen(testdata) > 0) 
    { 
        for(j = 1; j <= ArrayLen(testdata); j ++) 
        { 
            testdata = testdata[j]; 
            WriteOutput(testdata.getcustomer_name() & "<br>"); 
        } 
    } 
</cfscript>

とWriteOutPutを使って出力することになります。
慣れるといいかもしれませんが、やはりCFLOOPタグ等を使って出力をしたいと思ってしまいます。

ということで、CFLOOPタグ等で利用する為にはEntityLoadで返されたデータを通常のquery形式に変換することで解決できます。
entityToQueryという便利な関数がありますので、それを使ってquery形式に変換します。

sample5.cfmは以下の通りになります。

<cfscript>
	orm_test1 = EntityLoad("ORM_TEST1");
</cfscript>

<cfset orm_test1_convert = entityToQuery(orm_test1)>

<cfdump var="#orm_test1#">  <!--- EntityLoadで返ってきたArray --->
<cfdump var="#orm_test1_convert#">  <!--- entityToQueryでquery形式に変換したデータセット --->

<p>
<table border="1">
<tr>
<td>
ID
</td>
<td>
名前
</td>
<td>
部署
</td>
<td>
電話
</td>
</tr>
<cfoutput query="orm_test1_convert">  <!--- 通常のクエリ結果と同様に扱えます --->
<tr>
<td>
#orm_test1_convert.ID#
</td>
<td>
#orm_test1_convert.name#
</td>
<td>
#orm_test1_convert.division#
</td>
<td>
#orm_test1_convert.phone#
</td>
</tr>
</cfoutput>
</table>

実行結果は以下の通りです。