Доктрина 2 каскад сохраняется слишком много

так что это мой prePersist на EventListener

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Как заставить доктрину не создавать новый экземпляр, а вместо этого использовать тот, который я передал?

0

Решение

заметил мою проблему, я назначал атрибут из памяти, я должен извлечь его из базы данных, чтобы понять доктрину.

public function prePersist(LifecycleEventArgs $args)
{
if ($this->pmp == null) {
$this->pmp = $args->getEntity()->getPmp();
}

$taxonomicClass = $args->getEntity();

if($taxonomicClass instanceof TaxonomicClass){

if(is_null($taxonomicClass->getId())){
//this solved the problem
$pmp = $args->getEntityManager()->getRepository("AppBundle:Pmp")->find($this->pmp->getId());
$taxonomicClass->setPmp($pmp);
}
}
}

Теперь я буду иметь в виду, что когда создается новая сущность, но ее не нужно сохранять, вы должны извлечь ее из базы данных, cascade={"persist"} даже не было необходимости

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]