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

问题描述 投票:0回答:1

我有一个数据库列,叫做 modifiedON UPDATE CURRENT_TIMESTAMP 定义。

当我修改并持久化现有对象时,列会保持旧的值,因为它已经在对象属性中被设置了。有没有办法告诉Doctrine在持久化时不要设置该对象属性?

我在使用 unset 但这将使代码变得混乱,因为不是所有实体都有这个属性。

unset($object->modified);
$entityManager->persist($object);
php doctrine-orm
1个回答
0
投票

通过添加一个 LifecycleEvent.

在我 ClassMetadataBuilder 我有一个创建字段的方法。

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

而实体需要 modified 扩场 Versionable 定义方法的类。

abstract class Versionable extends JsonEncodable {

    protected $modified;

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

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

}
© www.soinside.com 2019 - 2024. All rights reserved.