【问题标题】:Replicate entity values with relationship values into another entity将具有关系值的实体值复制到另一个实体中
【发布时间】:2016-04-11 05:59:06
【问题描述】:

我有一个名为 user 的实体,我希望将实体值的精确副本复制到另一个名为“history”或“cache”或“order”的实体中 用户”用于记录保存,因此如果用户实体值发生变化,我们将拥有用户值的副本和一长串字段及其子实体的历史记录。

解决方案

我已经尝试过这个解决方案,但是我所有的属性都是私有的,这不适合这个。因为它只需要公共属性(除非我错了)。

Symfony 2 - Clone entity to different table

【问题讨论】:

  • 您也可以使用反射来访问私有值或 setter 函数
  • 如果您尝试保留某种审计日志,您还可以添加记录新旧值的生命周期事件。
  • 因此,当用户下订单时,应该制作该用户实体的快照,以便您可以在下订单时查看用户的值。正确的?我想我会创建一个 user_version 表(一个用户有多个版本),并向用户存储库添加一个函数,该函数创建一个用户快照(user_version 实例)并返回一个可以链接到订单的引用。该函数可以变得智能,以便在匹配上一个版本时不会创建新版本。
  • @JasonRoman、JimL 和 Gerben,感谢您的意见。我今天学到了一些新东西。我发现了问题,反射无法从以前的扩展类访问私有方法,但可以访问自私有。因此更改为受保护的实体上的私有解决了该问题。 Gerben,我很喜欢你的版本实例历史。可能对其他项目有用。

标签: php symfony oop orm doctrine-orm


【解决方案1】:

我已经通过使父扩展实体属性受到保护来解决这个问题,然后以下解决方案工作正常。

Symfony 2 - Clone entity to different table

实体副本

class OrderProduct extends Product {
}

// make sure product entity property values are protected and not private. 

解决方案 2

如果您想保留所有更改的完整历史记录,@JmilL 和 @Gerben 的解决方案也值得研究。

https://github.com/simplethings/EntityAudit

https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/loggable.md

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 2016-12-04
    • 1970-01-01
    • 2016-01-13
    • 2018-04-29
    相关资源
    最近更新 更多