cascade persist works like a charm (check out my '>> this does work' example) when called stand alone, but it just doesn't work when going through the form. because it seems the form API doesn't use the get/set methods to set the properties o.O?
On May 31, 7:20 pm, Stephan Petzl <stephan.pe...@gmail.com> wrote: > Without knowing whethercascade:persistshould do the job, i guess it > could be an issue with owning and inverse side of your relation.[1]> "The > owning side of a relationship determines the updates to the relationship in > the database." > > The owning side is your comment (since it is the one with the > inversedBy property), so maybe you should try to save it this way: > > $comment->setAuthor($user); > > and then look whether it gets persisted. > what i would love to know myself is, how the symfony form framework > handles bidirectional relations like that... > > [1]http://www.doctrine-project.org/docs/orm/2.0/en/reference/association... > > BR Stephan > > On May 28, 6:54 pm, Ruben de Vries <rubensay...@gmail.com> wrote: > > > > > > > > > I've been going at this problem for hours now so I figured I better > > just ask for help to avoid my head exploding soon ... > > > I'll paste some snippets and then try to explain. > > > >> yaml mapping for doctrime ORM > > > GoGreat\DemoBundle\Entity\DemoUser: > > oneToMany: > > comments: > > targetEntity: DemoComment > > mappedBy: author > > cascade: ["persist"] > > > GoGreat\DemoBundle\Entity\DemoComment: > > manyToOne: > > author: > > targetEntity: DemoUser > > inversedBy: comments > > > >> DemoUser entity > > > class GoGreat\DemoBundle\Entity\DemoUser { > > > public function addComments($comments) > > { > > $comments->setAuthor($this); > > $this->comments[] = $comments; > > } > > > } > > >> DemoUserType form > > > class GoGreat\DemoBundle\Form\DemoUserType { > > public function buildForm(FormBuilder $builder, array $options) > > { > > $builder->add('name', 'text'); > > $builder->add('comments', 'entity', array( > > 'class' => > > 'GoGreat\DemoBundle\Entity\DemoComment', > > 'property' => 'body', > > 'expanded' => true, > > 'multiple' => true, > > )); > > } > > > } > > >> this does work > > > $user = new DemoUser(); > > $comment = new DemoComment(); > > > $user->addComments($comment); > > > $em->persist($user); > > $em->flush(); > > > >> this doesn't work > > > $form = $this->get('form.factory')->create(new DemoUserType()); > > $request = $this->get('request'); > > $user = new DemoUser(); > > $em = $this->get('doctrine.orm.entity_manager'); > > > $form->setData($user); > > > if ($request->getMethod() == 'POST') { > > $form->bindRequest($request); > > if ($form->isValid()) { > > > foreach ($user->getComments() as $comment) { > > var_dump($comment->getBody(), > > $comment->getAuthor()); > > } > > > $em->persist($user); > > $em->flush(); > > } > > > } > > > the var_dump just before thepersistdoes throw out the body, but it > > doesn't have an author. > > I think the form isn't using DemoUser->addComments to set the > > comments, but how else could it set the comments? > > > What am I doing wrong? > > > If the examples aren't clear enough I can put the demo bundle on > > github for you to check ... -- If you want to report a vulnerability issue on symfony, please send it to security at symfony-project.com You received this message because you are subscribed to the Google Groups "symfony users" group. To post to this group, send email to symfony-users@googlegroups.com To unsubscribe from this group, send email to symfony-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/symfony-users?hl=en