2009-12-17 7 views
1

J'utilise les fonctions ORM dans CF9 et je suis juste un peu coincé sur la façon de répliquer une jointure externe gauche requête ..CF9 ORM Répliquer gauche jointure externe

J'ai un 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"; 
} 

et un CFC Tâche

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"; 
} 

Je puis une entityLoad exécutée de

<cfset results = entityLoad("TaskList",url.iTaskListID,true)> 
<cfset resultsQuery = entityToQuery(results)> 

Cependant, lorsque j'essaie d'utiliser resultsQuery, je ne peux pas accéder aux propriétés cfc de la tâche. Par exemple

cfoutput> 
<cfloop query="resultsQuery"> 
    #resultsQuery.iTaskID# 
    </cfloop> 
</cfoutput> 

Va produire l'erreur L'élément ITASKID n'est pas défini dans RESULTSQUERY.

Quelqu'un aurait-il des conseils?

Un grand merci

Répondre

1

entityToQuery n'intègre pas les propriétés de relation, seules les propriétés natives de l'entité chargée Hibernate. Faites un <CFDUMP var="#resultsQuery#"> et vous verrez uniquement les champs iTaskListID et sTitle dans la requête (selon votre exemple).

Il n'y a aucune raison de convertir la sortie entityLoad (un objet, puisque vous transmettez ID et unique = true) en requête. Accédez directement à l'objet dans vos résultats var et accédez à la relation en parcourant la sortie de results.getTask(), qui affichera un tableau d'objets Task (TaskList a une relation un-à-plusieurs avec Task).

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

Non pas que je le recommande, mais si vous voulez vraiment y accéder via des méthodes de requête, appelez ceci:

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