php - Doctrine 2 preUpdate 事件 - 插入时未触发?

标签 php doctrine

我有一堆同时具有 date_created 和 date_modified 字段的实体,我试图让这些字段在插入或更新时自动设置。 date_created 仅在插入时设置,但 date_modified 在插入或更新时设置。

我的实体类中有一个带有@PreUpdate 注释的方法,但它似乎只在实体更新时才会被调用。插入新实体时不会调用它。文档是这样描述 preUpdate 事件的:

“preUpdate 事件发生在对实体数据进行数据库更新操作之前。”

这是正确的行为吗?如果是这样,在更新或插入之前调用方法的最佳方法是什么?目前,如果我同时使用 @PreUpdate 和 @PrePersist 标记该方法,那么它就可以工作,但我不确定这是否是最佳的:

/**
 * @PreUpdate
 * @PrePersist
 */
public function beforeSave()
{
    if (!$this->getCreatedAt()) {
        $this->setCreatedAt(new \DateTime());
    }
    $this->setModifiedAt(new \DateTime());
}

最佳答案

Persist 和 Update 是 2 个不同的事件,因此如果您希望对它们都应用回调,那么您将需要这两个注释。创建两个方法可能会消除您的疑虑:

/**
 * @PrePersist
 */
public function beforePersist()
{
    $this->setCreatedAt(new \DateTime());        
    $this->setModifiedAt(new \DateTime());
}

/**
 * @PreUpdate
 */
public function beforeUpdate()
{        
    $this->setModifiedAt(new \DateTime());
}

关于php - Doctrine 2 preUpdate 事件 - 插入时未触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3754775/

相关文章:

mysql - Doctrine 1 从具有 2 个别名的一张表中进行选择

php - 如何减少 Doctrine 执行的查询数量?

PHP 数据库写入性能 PDO VS ORM

php - 将 JSON 数组从 Android 应用程序发送到 PHP

javascript - 以特定格式将 mysql 数据检索到 javascript 时出现问题

php - Doctrine 1.2 Pager - 它是否减少了从数据库请求的数据量

symfony - 获取子实体返回 null 而不是 arrayCollection 对象

JavaScript 字符 (£) 不显示而是显示 '�'

php - php中的SQL语句不会插入数据库

java - 从网站上的 PHP 脚本运行 Java 类文件