CF ORM是否有活动记录类型更新()?

CF ORM是否有活动记录类型更新()?,orm,coldfusion,Orm,Coldfusion,目前,我正在部分使用cfwheels及其活动记录ORM(这很好),部分使用原始cfml及其Hibernate ORM(这也很好) 这两种方法在适用的情况下都能很好地工作,但在使用CF ORM时,我最怀念的是cfwheels中提供的model.update()方法,您只需将表单结构传递给该方法,它将使用模型属性映射结构元素并更新记录。。非常适合更新和维护大型表。在CF ORM中,似乎更新记录的唯一方法是单独设置每一列,然后进行保存。是这样吗 cf9 ORM是否有一个活动记录类型update()(或

目前,我正在部分使用cfwheels及其活动记录ORM(这很好),部分使用原始cfml及其Hibernate ORM(这也很好)

这两种方法在适用的情况下都能很好地工作,但在使用CF ORM时,我最怀念的是cfwheels中提供的model.update()方法,您只需将表单结构传递给该方法,它将使用模型属性映射结构元素并更新记录。。非常适合更新和维护大型表。在CF ORM中,似乎更新记录的唯一方法是单独设置每一列,然后进行保存。是这样吗

cf9 ORM是否有一个活动记录类型update()(或等效)方法,该方法可以只接收一个带有值的结构来更新和更新对象,而不必指定每个值

例如,不是当前的:

member = entityLoadByPK('member',arguments.id);
member.setName(arguments.name);
member.setEmail(arguments.email);
在CF ORM中有这样的方法吗

member = entityLoadByPK('member',arguments.id);
member.update(arguments);

非常感谢您事先

没有一个方法与您想要的方法完全相同,但它确实将可选结构作为第二个参数,这将设置对象的属性,尽管根据您的代码当前的工作方式,使用此方法可能会很笨拙,我不知道;我不知道刷新ORM会话时是否执行了创建/更新

如果您的ORM实体继承了主CFC表单,那么您可以在那里添加一个方法。或者,您可以编写一个函数,并将其混合到对象中


我相信您知道,但是如果与未初始化的用户输入(如原始表单范围)一起使用,update()功能可能会成为一个(称为批量分配问题)。

在我的应用程序中,我通常为处理任务的模型创建两个帮助器函数:

/*
* Get properties as key-value structure
* @limit Limit output to listed properties
*/
public struct function getMemento(string limit = "") {

    local.props = {};

    for (local.key in variables) {
        if (isSimpleValue(variables[local.key]) AND (arguments.limit EQ "" OR ListFind(arguments.limit, local.key))) {
            local.props[local.key] = variables[local.key];
        }
    }

    return local.props;

}


/*
* Populate the model with given properties collection
* @props Properties collection
*/
public void function setMemento(required struct props) {

    for (local.key in arguments.props) {
        variables[local.key] = arguments.props[local.key];
    }

}
为了提高
setMemento
的安全性,可以检查变量范围中是否存在
local.key
,但这将跳过可为空的属性


因此,您可以制作
myObject.setMemento(dataAsStruct)然后保存它。

Sergii,完美!正是我希望找到的那种东西。已经实施。。容易的!!非常感谢。我在看Coldbox Active Record(),它看起来很酷,但比我需要的要重很多。。你的助手方法是完美的。再次感谢。@Jason,不客气。我相信这是一个相当流行的想法。我在Transfer ORM和CFORM中使用过它。不知道为什么Hibernate没有实现它。