2009-12-17 25 views
1

我使用CF9 ORM的特點和我只是有點憋屈如何複製一個左外連接查詢..CF9 ORM複製左外連接

我有一個任務列表CFC

component output="false" persistent="true"{ 
    property name="iTaskListID" fieldtype="id" generator="native"; 
    property name="sTitle" ormtype="string" length="50"; 
    property name="task" fieldtype="one-to-many" cfc="Task" fkcolumn="iTaskListID"; 
} 

和任務CFC

component output="false" persistent="true"{ 
    property name="iTaskID" fieldType="id" generator="native"; 
    property name="sTitle" notnull="true" type="string"; 
    property name="dtCreated" ormtype="date"; 
    property name="iListingID" ormtype="integer"; 
    property name="User" fieldtype="many-to-one" cfc="Users" fkcolumn="iUserID"; 
    property name="iTaskListID" ormtype="integer"; 
} 

我然後執行entityLoad

<cfset results = entityLoad("TaskList",url.iTaskListID,true)> 
<cfset resultsQuery = entityToQuery(results)> 

但是,當我嘗試使用resultsQuery時,我無法訪問任務cfc屬性。例如

cfoutput> 
<cfloop query="resultsQuery"> 
    #resultsQuery.iTaskID# 
    </cfloop> 
</cfoutput> 

將生成錯誤元素ITASKID在RESULTSQUERY中未定義。

有沒有人有任何建議?

非常感謝

回答

1

entityToQuery不整合關係屬性,只加載Hibernate實體內的原生屬性。做一個<CFDUMP var="#resultsQuery#">,你會在查詢中看到只有iTaskListID和sTitle字段(按你的例子​​)。

沒有理由將entityLoad輸出(一個對象,因爲您傳遞ID和unique = true)轉換爲查詢。在結果var中直接訪問對象,並通過循環result.getTask()的輸出來訪問關係,result.getTask()將輸出一個Task對象數組(TaskList與Task的一對多關係)。

<cfloop array="#results.getTask()#" index="obj"> 
    #obj.getITaskID()# 
</cfloop> 

不,我推薦它,但如果你真的想通過查詢方法來訪問它,而不是把這個:

<cfset taskQuery = entityToQuery(results.getTask())> 
<cfoutput query="taskQuery"> 
    #taskQuery.iTaskID# 
</cfoutput>