Symfony2 Doctrine在创建关联更改/更新/时更新用户实体时间戳

时间:2015-02-19 23:22:13

标签: php symfony doctrine-orm

我有一个用户实体,每次设置/添加/创建/编辑/删除关联时,我都想更新其'更新'日期时间字段(无论是OneToOne还是OneToMany)。基本上我想知道我的应用程序中与用户相关的内容何时发生了变化。

最重要的是,是否建议始终通过从用户实体调用->addXXX($xxx)来添加关联并级联持久化?在我的应用程序的某些部分,我从关系的另一端设置用户,当使用Symfony2表单时,它会自动执行(我认为?)。

最好的方法是什么?在设置用户的相关实体的每个方法中手动执行此操作都会过度。

1 个答案:

答案 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();
  }
}