我正试图使用以下方法将$linhas的旧数组选择更改为新数组setLinhas(数组集合$linhas(但当它进行更改时,会发生的情况是,在内部,他用新行创建了一个新对象,而不用新行更新旧对象。它将创建一个与旧对象具有相同值的新实例。它应该更新同一个对象,而不是创建一个新对象!
实体财产:
/**
* @var ArrayCollection
*
* @ORMOneToMany(targetEntity="AppBundleEntityLinhasPrecos", mappedBy="preco",orphanRemoval=true,cascade={"persist","merge"})
*/
protected $linhas;
/**
* @param $linhas
*/
public function setLinhas($linhas)
{
$this->linhas = new ArrayCollection($linhas);
}
服务中:
$oldObject->setLinhas($newObectWithNewLinhas->getLinhas());
$this->em->persist($oldObject);
但如果我手动更改,它会起作用:
$oldLinhas = $oldObject->getLinhas()->getValues();
foreach($oldLinhas as $oldLinha)
{
$oldObject->removeLinha($oldLinha);
}
$linhaToCopy = $newObectWithNewLinhas->getLinhas()->getValues();
foreach($linhasCopyNew as $linhaCopyNew)
{
$oldObject->addLinha($linhaCopyNew);
}
提前感谢!
你做错了!
请改用此构造函数和setter:
Preco
use DoctrineCommonCollectionsArrayCollection;
use DoctrineCommonCollectionsCollection;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity
*/
class Preco
{
//...
/**
* @var Collection
*
* @ORMOneToMany(targetEntity="AppBundleEntityLinhasPrecos", mappedBy="preco", orphanRemoval=true, cascade={"persist","merge"})
*/
protected $linhas;
//...
public function __construct()
{
$this->linhas = new ArrayCollection();
}
public function setLinhas($linhas)
{
$this->linhas = $linhas;
}
}
注意
您应该将条令集合传递到
setLinhas
中。通过这种方式,您可以用新集合完全替换旧集合(而不是向旧集合添加元素(。