Don*_*ggs 6 persistence doctrine-orm
我正在使用Doctrine 2实体.我们有一些实体在保存到数据库时必须更新相关项目.例如,当修改用户记录时,我们将其保存为新记录,并将"inactive"字段设置为"false".但是,我们必须将该用户以前所有记录的"非活动"字段设置为"true".这样做是为了保留审计历史记录.它是Legacy数据库,因此不能选择更改结构.
由于Doctrine通过将对象传递给persister对象(persist ::($ thisObj))而不是具有save方法($thisObj->save())的对象来保存对象,因此我们不能只从父对象扩展'save'方法.我在这里看到的唯一选择是尝试扩展'persist'对象,但这听起来像一只鹅鹅,只是等待发生.
我找到了一些关于事件的信息,但是没有看到如何添加它们以使事件在持久化特定实体时触发特定函数.
如何为我的某些实体添加预保存/后保存功能?
Max*_*Max 12
所以,您可能已经知道了http://www.doctrine-project.org/docs/orm/2.1/en/reference/events.html对吗?
您添加一个实体包含回调的注释,然后在该实体上创建特定的函数(需要公开),并使用@PrePersist或@PostPersist或其他任何内容对它们进行注释.
另一种方法是创建一个事件订阅者,使用doctrine事件管理器注册一个事件订阅者并实现名为prePersist,postPersist等的方法.他们会传递一个EventArguments对象,该对象包含与发生的事件相关的实体.
我知道这是对你的问题的一般回答,但你需要更具体地解决问题所在.
请不要执行实体管理器并覆盖持久化方法,就我所知,有更简洁的方法可以满足您的需求.
做你想做的事实际上很简单.它不需要与事件管理器一起使用,也不需要像这样复杂的事情.您使用称为"生命周期回调"的东西.这些是Doctrine在实体的"生命周期"中自动运行的函数,即:prePersist,postPersist,preUpdate,postUpdate等.您可以在此处找到完整列表:http://www.doctrine-project.org/docs/ ORM/2.0/EN /参考/ events.html
将此功能添加到实体的过程非常简单.
例如,查看以下代码:
/** @PostPersist */
public function doSPostPersist() {
$this->tester = 'Value changed by post-persist';
}
Run Code Online (Sandbox Code Playgroud)
我发现有时事件只是拒绝开火,我还不知道为什么.但是当它们发射时,它们会可靠地发射.