Доктрина сохраняется сущность со связанными сущностями, имеющими бывшую сущность в качестве ключа

У меня есть сущность, которая имеет отношение к OneToMany. Связанный объект имеет идентичность через идентификатор первого объекта + другое поле. Я попытался установить cascade: [«persist»] для первого объекта, но когда я пытаюсь сохранить его, он говорит мне, что связанные объекты не могут быть сохранены, и я сначала должен очистить первый объект. Но если я просто удаляю каскад и очищаю первую сущность, это даст исключение, говорящее, что оно не будет сохраняться, потому что связанные сущности не сохраняются, и я должен установить постоянство для каскада.

Как мне это решить? Единственное решение, которое приходит на ум:

$relatedEntities = $entity1->getRelatedEntities();
$entity1->setRelatedEntities(new ArrayCollection());
$em->persist($entity1);
$em->flush($entity1);

$entity1->setRelatedEntities($relatedEntities);
$em->flush();

Есть ли другой способ сделать это?

0

Решение

Как говорится в ошибке, вы должны сначала очистить свою первую сущность. Затем вы очищаете связанный объект. Некоторый псевдокод:

$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()

Я не совсем уверен, что вам нужно установить первый объект на второй после того, как вы его сбросили. Но вы можете узнать это очень просто, попробовав это;)

0

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

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

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