通过传递arraycollection更新实体OneToMany关系



我正试图使用以下方法将$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中。

  • 通过这种方式,您可以用新集合完全替换旧集合(而不是向旧集合添加元素(。

相关内容

  • 没有找到相关文章

最新更新