2009-12-17 44 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>