我正在使用CF9中的ORM功能,而且我对如何复制左外连接查询感到有些困惑。
我有一个TaskList 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中未定义。
有人会有什么建议吗?
非常感谢
答案 0 :(得分:1)
entityToQuery不集成关系属性,只加载Hibernate实体中的本机属性。执行<CFDUMP var="#resultsQuery#">
,您只会在查询中看到iTaskListID和sTitle字段(根据您的示例)。
没有理由将entityLoad输出(一个对象,因为您传入ID和unique = true)转换为查询。直接在结果var中访问对象,并通过循环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>