我如何在 Doctrine 或 Symfony 中创建一个“一次写入”字段?

我正在尝试让一些实体具有createdDateTime 字段,但我只希望它在最初创建实体时可设置,但以某种方式定义一个规则,即在创建实体后无法更改它。

有没有办法在 Symfony 约束或 Doctrine 中定义这种类型的约束?


胡说叔叔
浏览 107回答 3
3回答

慕工程0101907

通常,实现所需目标的方法就是不使用设置器并在实体实例化期间填充字段。class Foo    private $number;    private $createdAt;    public __construct() {        $this->createdAt = new DateTimeImmutable();    }    public getCreatedAt(): DateTimeImmutable {        return $this->createdAt;    }    public setNumber(int $number) {        $this->number = $number;    }    public getNumber(): int { return $this->int; }}这样你就可以知道你的实体将始终有一个createdAt不依赖于 DB 或 Doctrine 的有效字段,并且由于你没有设置器,你不能从外部修改值(不诉诸反射或其他技巧)。

暮色呼如

这不是真正的约束。你可以这样做class Foo {    /**     * @var \DateTime     * @ORM\Column(type="datetime")     */    private $createdAt;    public __construct() {        $this->createdAt = new DateTime();    }    public getCreatedAt(): DateTime {        return $this->createdAt;    }    ...}顺便说一下,看看 Gedmo/Timestampable,它为您的实体和映射提供了一些东西。 

动漫人物

作为约束,没有,但您可以通过使用生命周期回调来实现这一点。
打开App,查看更多内容
随时随地看视频慕课网APP