php – 如何更新doctrine对象类型字段

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何更新doctrine对象类型字段脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个实体用户,它实现了AdvancedUserInterface.该实体具有UserPRoPErties类的字段属性,该属性被映射为对象类型.

我的实体:

class User implements AdvancedUserInterface,\Serializable {
<....>
    /**
     * @VAR UserProperties
     *
     * @ORM\Column(name="properties",type="object",nullable=true,options={"default":null})
     */
    private $properties;
<....>
}

属性类:

class UserProperties {
    public $iSEMailVisible = false;
    public $isNameVisible = false;
}

如果数据库中的属性值为null,并且我对设置属性的实体对象进行了一些更改 – 它工作正常.但是,如果我对数据库进行了一些更改并且属性字段为非null(已存在序列化的UserProperties对象) – 则不会保存更改(但是用户实体上的所有其他更改都是).

我做错了什么?

在您的情况下,Doctrine的跟踪策略检查对象是否已更改 – 用户类.但是,当检查$this->属性是否已更改时,所有Doctrine都会检查它是否仍指向内存中的同一对象(!).

如果要强制它更新存储对象,可以将其所有属性复制到新对象实例(新UserProperties,然后将其重新分配给$this->属性),克隆它,或将Doctrine跟踪策略更改为NOTIFY(见http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/change-tracking-policies.html).

然而,最后一个将要求您更改对象的所有setter并实际实现通知机制(如Doctrine docs中所示),所以当我的代码中弹出此问题时,我只是重新创建了存储的对象(这是我的第一个建议,如这很简单).

但我确实认为这是一种意想不到的行为,因此我会在Doctrine问题跟踪器中打开一个票据/问题,因此至少有一个文档会对此发出警告.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何更新doctrine对象类型字段全部内容,希望文章能够帮你解决php – 如何更新doctrine对象类型字段所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。