2013-07-08 41 views
0

我有一個與menu.cfc和menuItem.cfc多對一/一對多關係的問題。它們都擴展node.cfc(最後聲明這些)。一對多非共同

index.cfm

<cfset oMenu = entityNew("menu")> 
<cfset oMenu.setTitle("Main menu")> 
<cfset entitySave(oMenu)> 
<cfset ORMFlush()> 

<cfset oMenuItem = entityNew("menuItem")> 
<cfset oMenuItem.setTitle("First main menu item")> 
<cfset oMenuItem.setMenu(oMenu)> 
<cfset entitySave(oMenuItem)> 
<cfset ORMFlush()> 

<cfdump var="#oMenu.getMenuItems()#"> 
<!--- array[empty] ---> 
<!--- WHY ?---> 

在DB,我menu_item.menu_id是正確的。

我也試過

<cfset oMenu = entityNew("menu")> 
<cfset oMenu.setTitle("Main menu")> 
<cfset entitySave(oMenu)> 
<cfset ORMFlush()> 

<cfset oMenuItem = entityNew("menuItem")> 
<cfset oMenuItem.setTitle("First main menu item")> 
<cfset entitySave(oMenuItem)> 
<cfset ORMFlush()> 

<cfset oMenu.addMenuItem(oMenuItem)> 

<cfdump var="#oMenu.getMenuItems()#"> 
<!--- array[empty] ---> 

在DB,我menu_item.menu_id爲空!

如果您對我做錯了什麼有所瞭解,那將會很好。 謝謝!

node.cfc

<cfcomponent entityname="node" output="false" persistent="true" table="nodes" discriminatorcolumn="type"> 
    <cfproperty name="id" fieldtype="id" generator="identity" default="0" unsavedvalue="0"> 
    <cfproperty name="type" insert="false" update="false"> 
    <cfproperty name="title" ormtype="string" notnull="true" default="" loadInForm="true" required="true"> 
    <cfproperty name="systemName" column="system_name" ormtype="string" notnull="true" default="" loadInForm="true" uniquekey="system_name_lang"> 
    <cfproperty name="parents" singularname="parent" fieldtype="one-to-many" cfc="nodeHierarchy" inverse="true" weight="weight" clearBeforeSave="true"> 
    <cfproperty name="children" singularname="child" fieldtype="one-to-many" cfc="nodeHierarchy" inverse="true" orderby="weight asc"> 
    <cfproperty name="node" fieldtype="many-to-one" cfc="node" fkcolumn="nid"> 
    <cfproperty name="created" ormtype="timestamp" sqltype="timestamp"> 
    <cfproperty name="updated" ormtype="timestamp" sqltype="timestamp"> 
</cfcomponent> 

menu.cfc

<cfcomponent entityname="menu" output="false" persistent="true" table="menus" extends="node" joincolumn="node_id" discriminatorvalue="menu"> 
    <cfproperty name="menuItems" singularname="menuItem" fieldtype="one-to-many" cfc="menuItem" inverse="true"> 
</cfcomponent> 

menuItem.cfc

<cfcomponent entityname="menuItem" output="false" persistent="true" table="menus_items" extends="node" joincolumn="node_id" discriminatorvalue="menu_item">   
    <cfproperty name="menu" fieldtype="many-to-one" cfc="menu" fkcolumn="menu_id"> 
    <cfproperty name="parentMenuItem" fieldtype="many-to-one" cfc="menuItem" fkcolumn="menu_item_id"> 
    <cfproperty name="childMenuItems" fieldtype="one-to-many" cfc="menuItem" fkcolumn="menu_item_id"> 
    <cfproperty name="node" fieldtype="one-to-one" cfc="com.cfc.app.models.node" fkcolumn="nid"> 
</cfcomponent> 
+1

你試過'EntityReload()'重新加載從數據庫中實體數據? –

+0

是的,在刪除創建過程後,我嘗試了',它是一樣的。 – Adysone

回答

0

我這樣做解決了這個問題這個<cfset oMenuItem.setMenu(oMenu)> AND <cfset oMenu.addMenuItem(oMenuItem)>

它現在似乎工作。

index.cfm

<cfset oMenu = entityNew("menu")> 
<cfset oMenu.setTitle("Main menu")> 
<cfset entitySave(oMenu)> 
<cfset ORMFlush()> 

<cfset oMenuItem = entityNew("menuItem")> 
<cfset oMenuItem.setTitle("First main menu item")> 
<cfset oMenuItem.setMenu(oMenu)> 
<cfset entitySave(oMenuItem)> 
<cfset ORMFlush()> 

<cfset oMenu.addMenuItem(oMenuItem)> 
<cfset entitySave(oMenu)> 
<cfset ORMFlush()> 

<cfdump var="#oMenu.getMenuItems()#"> 
+0

您是否嘗試過沒有前兩個EntitySave()和EntityFlush()?似乎你應該只需要保存一次。 – existdissolve

+0

不,我不能,因爲oMenu需要有一個ID添加到oMenuItem。 – Adysone