为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
胡说叔叔 2023-03-26 16:12:28
我正在尝试让一些实体具有createdDateTime 字段,但我只希望它在最初创建实体时可设置,但以某种方式定义一个规则,即在创建实体后无法更改它。有没有办法在 Symfony 约束或 Doctrine 中定义这种类型的约束?

3 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

通常,实现所需目标的方法就是不使用设置器并在实体实例化期间填充字段。


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 的有效字段,并且由于你没有设置器,你不能从外部修改值(不诉诸反射或其他技巧)。


查看完整回答
反对 回复 2023-03-26
?
暮色呼如

TA贡献1853条经验 获得超9个赞

这不是真正的约束。


你可以这样做


class Foo 

{

    /**

     * @var \DateTime

     * @ORM\Column(type="datetime")

     */

    private $createdAt;


    public __construct() {

        $this->createdAt = new DateTime();

    }


    public getCreatedAt(): DateTime {

        return $this->createdAt;

    }


    ...


}

顺便说一下,看看 Gedmo/Timestampable,它为您的实体和映射提供了一些东西。 


查看完整回答
反对 回复 2023-03-26
?
动漫人物

TA贡献1815条经验 获得超10个赞

作为约束,没有,但您可以通过使用生命周期回调来实现这一点。



查看完整回答
反对 回复 2023-03-26

没有找到匹配的内容?试试慕课网站内搜索吧

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号