2011-05-25 58 views
2

我正在使用Model-Glue/Coldspring作爲新應用程序,我想我會將CF9 ORM放入組合中。CF9 ORM使用對象填充實體

我現在唯一的問題是用一個對象填充一個實體。下面的代碼或多或少驗證只有一個用戶名可以存在。還有一些不顯示的邏輯。

我首先想到的是用這樣的:

var entity = entityload('UserAccount' ,{UserName=arguments.UserAccount.getUserName()},"true")

entity = arguments.UserAccount;

如何過這也不行,我所期望的方式。甚至有可能用一個對象來填充一個實體,還是我需要使用這個setter?

+0

不符合您的預期?你真的期望什麼? – Henry 2011-05-25 17:06:07

+0

我在期待實體被來自對象的值填充。 – rottmanj 2011-05-25 17:21:11

+0

'UserAccount'應該是您的實體。只要設置'persistent = true'就可以了。爲什麼你需要用'UserAccount'填充實體? – Henry 2011-05-25 17:21:29

回答

0

它甚至有可能用對象填充實體或我需要使用setters?

如果你的意思是「是否有可能 從已經存在並具有屬性設置永久性CFC的實例創建 負載的ORM實體?」,則是你可以使用EntityLoadByExample(object,[unique])

entity = EntityLoadByExample(arguments.userAccount,true); 

這假定userAccount CFC已被定義爲持久性的,並且其用戶名值已在傳入之前設置(在您的情況中似乎是這種情況)。請記住,如果在傳遞的對象中設置了任何其他屬性(包括空字符串),則它們將用作過濾器來加載實體,因此如果它們不完全匹配數據庫中的記錄,沒有東西會被加載。

+0

這隻適用於以前持續存在的實體。亨利的回答最適合處理新的未保存的對象。 – CfSimplicity 2011-05-26 16:17:03

4

不知道這是你在找什麼。如果你有...

component persistent="true" entityName="Foo" 
{ 
    property a; 
    property b; 
} 

您可以通過一個結構在第二參數去初始化實體(在CF9.0.1加入我相信)

EntityNew("Foo", {a="1",b="2"}); 

要使用另一個對象來填充富,你可以使用Memento模式,併爲您的對象實現一個GetMemento()函數,該函數返回其所有屬性的結構。

EntityNew("Foo", bar.getMemento()); 

但是,CF不會調用您的自定義setter!如果你想使用setter來設置它們,你可以在你的構造函數中添加對調用者的調用,或者使用你選擇的MVC框架來填充bean。在Model-Glue中,它是makeEventBean()

更新:還是......下面是黑客...

EntityNew("Foo", DeserializeJSON(SerializeJSON(valueObject))); 

使用此風險自擔。 JSON可能會對你的數字和'是','不','真','假'字符串做奇怪的事情。 :)