CF9 ORM дублирует левое внешнее соединение - PullRequest
1 голос
/ 17 декабря 2009

Я использую функции ORM в CF9 и немного застрял в том, как реплицировать левый запрос внешнего соединения.

У меня есть 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";
}

И Задача ХФУ

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 Ответ

1 голос
/ 09 августа 2010

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>
...