问题描述
我正在为新的应用程序使用Model-glue / Coldspring,我想我会将CF9 ORM投入使用。
我现在唯一的问题是用对象填充实体。下面的代码或多或少地验证了只能存在一个用户名。还有一些其他逻辑未显示。
我首先想到的是使用这样的东西:
var entity = entityload(\'UserAccount\',{UserName=arguments.UserAccount.getUserName()},\"true\")
entity = arguments.UserAccount;
但是这怎么会不符合我的预期。甚至有可能用对象填充实体,还是我需要使用设置器?
解决方法
甚至有可能用对象填充实体,还是我需要使用设置器?
如果您的意思是“可以从已经存在并已设置属性的持久性CFC实例创建加载ORM实体吗?”,那么可以使用
EntityLoadByExample( object,[unique] )
entity = EntityLoadByExample( arguments.userAccount,true );
这假定userAccount CFC已定义为持久性,并且在传递用户名之前已设置其用户名值(在您的情况下似乎是这种情况)。
请记住,如果在传递的对象中设置了任何其他属性(包括空字符串),它们将用作加载实体的过滤器,因此,如果它们与数据库中的记录不完全匹配,则不会加载任何内容。
,不知道这是您要找的东西。如果你有...
component persistent=\"true\" entityName=\"Foo\"
{
property a;
property b;
}
您可以在第二个参数中传递一个结构以初始化实体(我相信CF9.0.1中已添加)
EntityNew(\"Foo\",{a=\"1\",b=\"2\"});
要用另一个对象填充Foo,可以使用Memento模式,并为对象实现一个GetMemento()
函数,该函数返回其所有属性的结构。
EntityNew(\"Foo\",bar.getMemento());
但是,CF不会调用您的自定义设置器!如果要使用setter设置它们,则可以在init()
构造函数中添加对setter的调用,或使用选择的MVC框架填充bean。在模型胶中,它是makeEventBean()
。
更新:或者...这是黑客...
EntityNew(\"Foo\",DeserializeJSON(SerializeJSON(valueObject)));
使用此方法后果自负。 JSON可能会对您的数字和\'yes \',\'no \',\'true \',\'false \'字符串产生奇怪的影响。 :)