【问题标题】: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();
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-14
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多