我有数组类型字段主义实体:如何强制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保存在该字段中所做的更改(或轻轻通知它需要保存的该字段中的更改)?
我正在尝试此操作,如果此操作将尽快为您提供奖励。你的回答听起来很棒!非常感谢@Vladim Ashikhman – Mick
令人惊叹!我只能在2小时内归功赏金,但这都是你的。我在这花了很多时间,说实话,我不是唯一的一个。逻辑很漂亮。你真棒!请参考这篇文章[这个问题](http://stackoverflow.com/questions/13227658/doctrine-does-not-update-a-simple-array-type-field/13232142#13232142)。事实证明,这是一个非常相似的问题。做得好! – Mick
我已经改变了setMethod()了一下,它现在可以工作,如果你改变数组的光标。 –