Как обновить связанную сущность с Doctrine2? - PullRequest
0 голосов
/ 11 февраля 2012

Рамка имеет однонаправленную ассоциацию oneToOne с Photo.

  • Полагаю, теперь каждый кадр связан с фотографией.
  • Я также предполагаю, что фотография не хранит информацию о кадре.
  • Я хочу знать, какая фотография в рамке (есть фотография в рамке)
  • Я не хочу знать, в каком кадре находится фотография
  • Я предполагаю, что у меня есть фотография на больше , чем один кадр!

К настоящему времени все работало как ожидалось:

$photo = new Photo();
$another_photo = new Photo();
$frame = new Frame();
$frame->setPhoto($photo);

$em->persist($frame);
$em->flush();

Рамка и две фотографии созданы, и рамка связана с $ photo в БД. Я могу запросить $ frame и получить $ photo с помощью getPhoto ().

Но я хочу обновить фотографию рамки сейчас, и она не работает:

$frame = $em->getRepository('Frame')->findOneById(id_of_frame);
$frame->setPhoto($another_photo);
$em->persist($frame);
$em->flush();

И получите сообщение об ошибке: Новый объект был обнаружен в связи «Кадр # фотография», который не был настроен для каскадного сохранения операций для объекта. Явно сохраняйте новый объект или настраивайте каскадные сохраняющиеся операции в отношении.

Я могу установить каскад = "persist" внутри отношения Frame OneToOne, и ошибка больше не возникает, но я получаю новую ошибку о непостоянном цвете, которую я использую в фотографии, которую я действительно не устанавливаю и хочу: (

Почему я вообще получаю ошибку? Зачем мне нужно сохранять каскад рамки и фото?

Спасибо!

1 Ответ

1 голос
/ 11 февраля 2012

Как вы создаете $ anothor_photo? Поскольку он уже находится в базе данных, вам нужно будет сделать что-то вроде: $ another_photo = $ entityManager-> getReference ('Photo', $ another_photo_id);

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

...