У меня есть сущность, которая имеет отношение к OneToMany. Связанный объект имеет идентичность через идентификатор первого объекта + другое поле. Я попытался установить cascade: [«persist»] для первого объекта, но когда я пытаюсь сохранить его, он говорит мне, что связанные объекты не могут быть сохранены, и я сначала должен очистить первый объект. Но если я просто удаляю каскад и очищаю первую сущность, это даст исключение, говорящее, что оно не будет сохраняться, потому что связанные сущности не сохраняются, и я должен установить постоянство для каскада.
Как мне это решить? Единственное решение, которое приходит на ум:
$relatedEntities = $entity1->getRelatedEntities();
$entity1->setRelatedEntities(new ArrayCollection());
$em->persist($entity1);
$em->flush($entity1);
$entity1->setRelatedEntities($relatedEntities);
$em->flush();
Есть ли другой способ сделать это?
Как говорится в ошибке, вы должны сначала очистить свою первую сущность. Затем вы очищаете связанный объект. Некоторый псевдокод:
$entity_one = new Something();
//Now set object values
$em->persist($entity_one);
$em->flush();
$entity_two = new SomethingElse();
//Now set object values (set the related/relation to the first entity)
$em->persist($entity_two);
$em->flush()
Я не совсем уверен, что вам нужно установить первый объект на второй после того, как вы его сбросили. Но вы можете узнать это очень просто, попробовав это;)
Других решений пока нет …