如何防止 Doctrine 覆盖具有生成值的列?

How to prevent Doctrine from overriding column with generated value?

我有一个名为 modified 的数据库列,定义为 ON UPDATE CURRENT_TIMESTAMP

当我修改并保留现有对象时,该列保留旧值,因为它已经在对象 属性 中设置。有没有办法告诉 Doctrine 在坚持时不要设置那个对象 属性?

我在坚持之前使用 unset 得到了想要的结果,但这会使代码变得混乱,因为并非所有实体都具有 属性.

unset($object->modified);
$entityManager->persist($object);

通过添加 LifecycleEvent 解决了它。

在我的 ClassMetadataBuilder 中,我有一个创建字段的方法:

public function addModifiedTimeField(): void {
    $this->createField("modified", "timestamp")->build();
    $this->addLifecycleEvent("unsetModified", "preFlush");
}

需要 modified 字段的实体扩展了定义方法的 Versionable class。

abstract class Versionable extends JsonEncodable {

    protected $modified;

    public function getModified() {
        return $this->modified;
    }

    public function unsetModified(): void {
        $this->modified = null;
    }

}