许多与克隆实体的关联并未在冲洗时更新



** 更新的问题 **

这很奇怪,我们有一个Entity,它定义了一个简单的关联:

/**
 *
 * @var MyParent
 * @ORMManyToOne(targetEntity="MyParent", inversedBy="parents")
 */
private $myParent;

MyParent看起来像:

/**
 * @ORMOneToMany(targetEntity="Entity", mappedBy="myParent")
 */
private $parents;
public function __construct()
{
    $this->parents = new ArrayCollection();
}
public function __clone() {
    $this->id = null;
}    

现在,我们通过例如

称呼该实体
$entity = $repository->find(1);

并获得一个具有我的标准的实体。

现在,我们通过克隆来创建一个新的父,并将其设置为已加载的实体:

$newParent = clone $someOtherMyParent();
$this->em->persist($newParent);
$entity->setParent($newParent);
$this->em->persist($entity);
$this->em->flush();

但是新父母不会被实体保存,什么也不会发生,没有错误,它只是默默失败。

使用

$newEntity = new MyParent(); //instead of clone $someOtherMyParent

正常工作。

我们一定会在此处更新自有方面。发生了什么事?

这里的问题是,如果您克隆MyParent,也必须重置该集合,因为否则学说显然无法识别新目标:

public function __clone() {
    $this->id = null;
    $this->parents = new ArrayCollection(); // this fixes the issue!
}    

如果有人可以解释为什么在评论中发生这种情况,那将很高兴知道。

相关内容

  • 没有找到相关文章

最新更新