1

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>

Element ITASKID is undefined in RESULTSQUERY というエラーが生成されます。

誰かアドバイスはありますか?

どうもありがとう

4

1 に答える 1

1

entityToQueryはリレーションシッププロパティを統合せず、ロードされたHibernateエンティティ内のネイティブプロパティのみを統合します。を実行する<CFDUMP var="#resultsQuery#">と、クエリにiTaskListIDフィールドとsTitleフィールドのみが表示されます(例による)。

entityLoad出力(IDとunique = trueを渡すため、1つのオブジェクト)をクエリに変換する理由はありません。結果変数でオブジェクトに直接アクセスし、results.getTask()の出力をループして関係にアクセスします。これにより、Taskオブジェクトの配列が出力されます(TaskListはTaskと1対多の関係にあります)。

<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 に答える