2009-12-17 2 views
1

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

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

У кого-нибудь есть совет?

Большое спасибо

ответ

1

entityToQuery не интегрирует свойства отношений, только нативные свойства в сущности Hibernate загруженной. Сделайте <CFDUMP var="#resultsQuery#">, и вы увидите только поля iTaskListID и sTitle в запросе (в вашем примере).

Нет причин для преобразования вывода entityLoad (один объект, поскольку вы передаете ID и unique = true) в запрос. Получите доступ к объекту непосредственно в ваших результатах var и получите доступ к соединению путем циклического вывода результата results.getTask(), который выведет массив объектов Task (TaskList имеет отношение «один ко многим» к задаче).

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

Не то, что я рекомендую, но если вы действительно хотите получить доступ к этому с помощью методов запроса, вызовите вместо этого:

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