prePersist与建构方法之间的学说差异

时间:2018-11-28 12:31:26

标签: symfony doctrine

根据doctrine documentary

  

在给定实体发生prePersist事件之前,   执行该实体的EntityManager持久操作。 应该   请注意,此事件仅在   实体(即它不会在以后的更新时触发)。

最后一部分很重要,使我感到奇怪; __contruct()方法在那种情况下有什么区别吗?

假设我要为一个实体设置创建日期和时间(createdAt)。我可以通过生命周期回调做到这一点:

/**
 * @ORM\PrePersist
 */
public function setTimestamp()
{
    $this->setCreatedAt(new \DateTime('now'));
}

或者我可以像这样使用构造函数:

public function __construct()
{
    $this->createdAt = new \DateTime('now');
}

这完全一样吗?如果是这样,为什么会有PrePersist生命周期回调?

1 个答案:

答案 0 :(得分:1)

  

这完全一样吗?

不!它们在语义上是不同的。

  • 在内存中创建对象时会调用构造方法。
  • prePersist事件会在您将其持久保存到数据库之前被触发。

请考虑以下情况:创建对象并处理一些数据(需要一些时间),然后将其持久化到数据库中。所以时间可能会有所不同。