1

我正在使用 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>

将产生错误 Element ITASKID is undefined in RESULTSQUERY。

有人有什么建议吗?

非常感谢

4

1 回答 1

1

entityToQuery 不集成关系属性,仅加载 Hibernate 实体内的本机属性。执行 a <CFDUMP var="#resultsQuery#">,您将仅在查询中看到 iTaskListID 和 sTitle 字段(根据您的示例)。

没有理由将 entityLoad 输出(一个对象,因为您传入 ID 和 unique=true)转换为查询。直接在结果变量中访问对象,并通过循环输出 results.getTask() 来访问关系,这将输出一个 Task 对象数组(TaskList 与 Task 具有一对多的关系)。

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

不是我推荐它,但如果您真的想通过查询方法访问它,请改为调用它:

<cfset taskQuery = entityToQuery(results.getTask())>
<cfoutput query="taskQuery">
    #taskQuery.iTaskID#
</cfoutput>
于 2010-08-09T02:51:11.913 回答