PHP强制类型定义数组,php – 如何强制Doctrine更新数组类型字段?

我有一个带有数组类型字段的Doctrine实体:

/**

* @ORM\Table()

*/

class MyEntity

{

(...)

/**

* @var array $items

*

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

*/

private $items;

/**

* @param SomeItem $item

*/

public function addItem(SomeItem $item)

{

$this->items[] = $item;

}

(...)

}

如果我将元素添加到数组,此代码正常工作:

$myEntityObject->addItems(new SomeItem());

$EntityManager->persist($myEntityObject);

$EntityManager->flush();

$myEntityObject使用正确的数据保存到数据库(数组被序列化,并在查询数据库时反序列化).

不幸的是,当我在不改变该数组大小的情况下更改数组中的一个对象时,如果我试图将更改保存到数据库,则Doctrine不会执行任何操作.

$items = $myEntityObject->getItems();

$items[0]->setSomething(123);

$myEntityObject->setItems($items);

$EntityManager->persist($myEntityObject);

$EntityManager->flush();

print_r($myEntityObject);

虽然,该代码的最后一行中的print_r显示更改的对象的数据,但是如果数组大小没有更改,则Doctrine不知道数组内的某些内容已更改.有没有办法强制Doctrine保存在该字段中所做的更改(或者轻轻地告知它该字段中需要保存的更改)?

只是在文档中找到了解决我的问题的方法:

它需要对代码进行大量更改,但它可以正常工作.有人知道如何保留其他字段的默认跟踪策略,并仅将NotifyPropertyChanged用于存储数组的字段吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值