так это мой prePersist на EventListenerдоктрина 2 каскада не проходят экономии слишком много
public function prePersist(LifecycleEventArgs $args)
{
//the first entity will have the PMP, so we catch it and continue to skip this if after this
if ($this->pmp == null) {
$this->pmp = $args->getEntity()->getPmp();
}
$taxonomicClass = $args->getEntity();
if($taxonomicClass instanceof TaxonomicClass){
if(is_null($taxonomicClass->getId())){
//here it says that i have created a new entity, need to persist it via cascade={"persist"}
$taxonomicClass->setPmp($this->pmp);
}
}
}
это нормально, я добавил аннотацию на нем:
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Pmp", cascade={"persist"})
* @ORM\JoinColumn(name="pmp_id", referencedColumnName="id", nullable=false)
**/
private $pmp;
и сохраняет все из моей иерархии, даже новый PMP, объект, который уже существует в базе данных!
Я хочу, чтобы все, что мне удалось сохранить из моей иерархии, должно быть связано с PMP, которое я передал, но когда я установил $taxonomicClass->setPmp($this->pmp);
, доктрина думает, что я создал новый экземпляр PMP, так как им нет, я просто хочу к этому парню есть ассоциатив с PMP.
Я попытался поставить merge
на вариант каскада, но он работает только с persist
, как заставить doctrine не создавать новый экземпляр и вместо этого использовать тот, который я передал?