** 更新的问题 **
这很奇怪,我们有一个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!
}
如果有人可以解释为什么在评论中发生这种情况,那将很高兴知道。