【发布时间】:2016-04-11 05:59:06
【问题描述】:
我有一个名为 user 的实体,我希望将实体值的精确副本复制到另一个名为“history”或“cache”或“order”的实体中 用户”用于记录保存,因此如果用户实体值发生变化,我们将拥有用户值的副本和一长串字段及其子实体的历史记录。
解决方案
我已经尝试过这个解决方案,但是我所有的属性都是私有的,这不适合这个。因为它只需要公共属性(除非我错了)。
【问题讨论】:
-
您也可以使用反射来访问私有值或 setter 函数
-
如果您尝试保留某种审计日志,您还可以添加记录新旧值的生命周期事件。
-
因此,当用户下订单时,应该制作该用户实体的快照,以便您可以在下订单时查看用户的值。正确的?我想我会创建一个 user_version 表(一个用户有多个版本),并向用户存储库添加一个函数,该函数创建一个用户快照(user_version 实例)并返回一个可以链接到订单的引用。该函数可以变得智能,以便在匹配上一个版本时不会创建新版本。
-
@JasonRoman、JimL 和 Gerben,感谢您的意见。我今天学到了一些新东西。我发现了问题,反射无法从以前的扩展类访问私有方法,但可以访问自私有。因此更改为受保护的实体上的私有解决了该问题。 Gerben,我很喜欢你的版本实例历史。可能对其他项目有用。
标签: php symfony oop orm doctrine-orm