我有一个用户实体,每次设置/添加/创建/编辑/删除关联时,我都想更新其'更新'日期时间字段(无论是OneToOne还是OneToMany)。基本上我想知道我的应用程序中与用户相关的内容何时发生了变化。
最重要的是,是否建议始终通过从用户实体调用->addXXX($xxx)
来添加关联并级联持久化?在我的应用程序的某些部分,我从关系的另一端设置用户,当使用Symfony2表单时,它会自动执行(我认为?)。
最好的方法是什么?在设置用户的相关实体的每个方法中手动执行此操作都会过度。
答案 0 :(得分:2)
我认为不可能通过一般的doctrine2或原始SQL机制自动完成。 Doctrine2甚至并不总是加载所有相关实体的性能(参见Lazy Loading)
我建议的最佳方法是为您不想监控的相关实体实施EntityListener
。使用postUpdate
处理程序,您应该能够显式更改父实体的时间戳字段。
I.e child class
/** @Entity @EntityListeners({"ChildListener"}) */
class Child
{
/** @var User */
private $parent;
public function getParent() {return $this->parent; }
}
听众本身
class ChildListener
{
public function postUpdate(Child $child, LifecycleEventArgs $event)
{
$child->getParent()->updateTimestamp();
}
}