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


Symfony2 Doctrine update user entity timestamp when association changes/updates/is created

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

除此之外,是否建议始终通过从用户实体调用->addXXX($xxx)来添加关联并级联持久化它?在我的应用程序的某些部分中,我从关系的另一端设置用户,当使用Symfony2表单时,它会自动这样做(我想是吗?)。

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

我认为不可能通过一般的doctrine2或原始SQL机制自动执行。Doctrine2甚至不总是加载所有相关实体以获得性能(请参阅懒惰加载)

我可以建议的最好方法是为您不希望监视的相关实体实现EntityListener。使用postUpdate处理程序,您应该能够显式更改父实体的时间戳字段。

I.e儿童班

/** @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();
  }
}