亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何在 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
  • 3 回答
  • 0 關注
  • 128 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號