У меня проблема с обновлением сущности (она обратная сторона) в форме, в то время как объект должным образом обновляется всеми данными, связанные с ним другие объекты не являются, то есть в базе данных их столбец, ссылающийся на «основной» объект, остается null или данные остаются нетронутыми.
Вот код:
class Offer { /** * @var ArrayCollection * * @ORM\OneToMany(targetEntity="DealOption", mappedBy="offer", cascade={"persist"}) */ private $dealOptions; /** * @var Event * * @ORM\OneToOne(targetEntity="Event", inversedBy="offer") * @ORM\JoinColumn(name="event_id", referencedColumnName="id") */ private $event; } class DealOption { /** * @var Offer * * @ORM\ManyToOne(targetEntity="Offer", inversedBy="dealOptions") * @ORM\JoinColumn(name="offer_id", referencedColumnName="id", onDelete="SET NULL") */ private $offer; } class Event { /** * @var Offer * * @ORM\OneToOne(targetEntity="Offer", mappedBy="event") * @ORM\JoinColumn(name="offer_id", referencedColumnName="id", onDelete="SET NULL") */ private $offer;
И действие обновления:
public function updateAction(Request $request, $id) { $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('AppBundle:Offer')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find Offer.'); } $deleteForm = $this->createDeleteForm($id); $editForm = $this->createEditForm($entity); $editForm->handleRequest($request); if ($editForm->isValid()) { $em->persist($entity); $em->flush(); return $this->redirect($this->generateUrl('offer')); } return array( 'entity' => $entity, 'edit_form' => $editForm->createView(), 'delete_form' => $deleteForm->createView(), ); }
Согласно моим исследованиям и чтению аналогичных проблем с документацией, он должен работать так, как есть, однако это не так, я подозреваю, что некоторые основные недоразумения в моей части того, как эти отношения должны вести себя, работать и быть определенными, но до сих пор нет буено и нет Сукчес. Я был бы благодарен за любой совет.
Изменить – OfferFormBuilder:
class OfferType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('dealOptions') ->add('title') ->add('event') ->add('division') ; }