我使用的是Doctrine 2实体。我们有一些实体在将其保存到数据库时必须更新相关项目。例如,当用户记录被修改时,我们将其保存为新记录,并将“非活动”字段设置为“假”。但是,我们必须将该用户的所有先前记录的“非活动”字段设置为“真”。这样做是为了保留审计历史。这是一个传统数据库,所以更改结构不是一个选项。由于Doctrine通过将对象传递给persist对象(persist ::($ thisObj))来保存对象,而不是具有保存方法的对象($thisObj->save()
),所以我们不能只从一个保存方法父对象。我在这里看到的唯一选择是试图扩展'坚持'的对象,但这听起来像一只鹅群,只是等待发生。学说2,需要执行代码前持久性/后持久性
我发现了一些有关事件的信息,但没有看到如何添加它们以使事件在特定实体持续存在时触发特定函数。
如何向我的某些实体添加预保存/保存后功能?
OK,想通了,为什么事件有时“干脆拒绝解雇”。 prePersist/posPersist事件仅在保存新记录时才会发生。如果您正在更新现有记录,则preUPdate/postUpdate会消失。因此,即使调用持久化方法,如果要保存现有对象,也应用preUpdate/postUpdate生命周期事件。 –
感谢您带领我走向正确的方向。一个后续行动:我从基础类中获取所有实体,以提供一些常规功能。我讨厌必须在每个实体中放置一个事件,因为在我的情况下,我真的只是使用postLoad来激发构造函数,并且我希望在所有实体中都这样做。有什么办法可以将它移到基类中,而无需在entitiy中进行额外的复制和粘贴? – redreinard
第二点对我来说非常有用!非常感谢你! –