【问题标题】:Symfony2 Doctrine update user entity timestamp when association changes/updates/is createdSymfony2 Doctrine 在关联更改/更新/创建时更新用户实体时间戳
【发布时间】:2015-02-19 23:22:13
【问题描述】:
我有一个用户实体,我想在每次设置/添加/创建/编辑/删除关联时更新其“更新”日期时间字段(无论是 OneToOne 还是 OneToMany)。基本上我想知道我的应用程序中与用户相关的内容何时发生了变化。
最重要的是,是否建议始终通过从用户实体调用->addXXX($xxx) 添加关联并级联持久化它?在我的应用程序的某些部分,我从关系的另一端设置用户,当使用 Symfony2 表单时,它会自动这样做(我认为?)。
最好的方法是什么?在设置用户的关联实体的每种方法中手动执行此操作将是矫枉过正。
【问题讨论】:
标签:
php
symfony
doctrine-orm
【解决方案1】:
我认为通过一般学说2 或原始 SQL 机制自动执行是不可能的。 Doctrine2 甚至不总是加载所有相关实体以提高性能(请参阅Lazy Loading)
我可以建议的最佳方法是为您不想监控的相关实体实施EntityListener。使用postUpdate 处理程序,您应该能够显式更改父实体的时间戳字段。
即子类
/** @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();
}
}