Delete record from embedded Form

New topics about Symfony 2 should go here

Moderators: dcobalt, tiagojsag

Delete record from embedded Form

Postby cartmanac » Sat Jul 14, 2012 1:07 am

Hi,

I have got a problem with embedded Forms in Symfony2 Doctrine2.

Adding forms and records works fine, but removing does not work.
I used this tutorial: http://symfony.com/doc/current/cookbook ... tions.html --> allowing tags to be removed

Error is --> Fatal error: Call to undefined method Xxx\XxxxBundle\Entity\Aktionen::removeElement() in ...

PLEASE HELP!!!!!


My DB:
Code: Select all
\Entity\Aktionen:
  type: entity
  table: aktionen
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
    name:
      type: string
      length: 255
    begin:
      type: datetime
    end:
      type: datetime
    edittime:
      type: integer
  oneToMany:
    aktionen_produkte:
      targetEntity: AktionenProdukte
      mappedBy: aktion
      cascade: ["remove", "persist"]
  lifecycleCallbacks: {  }


\Entity\AktionenProdukte:
  type: entity
  table: aktionen_produkte
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
  manyToOne:
    aktion:
      targetEntity: Aktionen
      inversedBy: aktionen_produkte
      joinColumn:
        name: aktion_id
        referencedColumnName: id
        onDelete: CASCADE
        onUpdate: CASCADE
    produkt:
      targetEntity: Produkte
      inversedBy: aktionen_produkte
      joinColumn:
        name: produkt_id
        referencedColumnName: id
        onDelete: CASCADE
        onUpdate: CASCADE
    verkaufskategorie:
      targetEntity: Verkaufskategorien
      inversedBy: aktionen_produkte
      joinColumn:
        name: verkaufskategorie_id
        referencedColumnName: id
        onDelete: CASCADE
        onUpdate: CASCADE
  lifecycleCallbacks: {  }



\Entity\Produkte:
  type: entity
  table: produkte
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
    kuerzel:
      type: string
      length: 255
    name:
      type: string
      length: 255
  manyToOne:
    produktlinie:
      targetEntity: Produktlinien
      mappedBy: produktlinie_id
      referencedColumnName: id
    produktkategorie:
      targetEntity: Produktkategorien
      mappedBy: produktkategorie_id
      referencedColumnName: id
  oneToMany:
    aktionen_produkte:
      targetEntity: AktionenProdukte
      mappedBy: produkt
  lifecycleCallbacks: {  }


\Entity\Verkaufskategorien:
  type: entity
  table: verkaufskategorien
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
    name:
      type: string
      length: 255
  oneToMany:
    aktionen_produkte:
      targetEntity: AktionenProdukte
      mappedBy: verkaufskategorie
  lifecycleCallbacks: {  }




My editAction in "AktionenController" looks like this:

Code: Select all
public function editAction($id, Request $request)
    {
        $em = $this->getDoctrine()->getEntityManager();
        $entity = $em->getRepository('XxxXxxxBundle:Aktionen')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Aktionen entity.');
        }
       
        $request = $this->getRequest();
       
        $editForm = $this->createForm(new AktionenType(), $entity);
        $deleteForm = $this->createDeleteForm($id);   
       
        // Create an array of the current Tag objects in the database
       foreach ($entity->getAktionenProdukte() as $tag) $originalTags[] = $tag;
   
       $editForm = $this->createForm(new AktionenType(), $task);
   
       foreach ($entity->getAktionenProdukte() as $tag) {
                   foreach ($originalTags as $key => $toDel) {
                       if ($toDel->getAktion() === $tag->getId()) {
                           unset($originalTags[$key]);
                       }
                   }
               }
   
               // remove the relationship between the tag and the Task
               foreach ($originalTags as $tag) {
                   // remove the Task from the Tag
                   $tag->getAktion()->removeElement($entity);
   
                   // if it were a ManyToOne relationship, remove the relationship like this
                   // $tag->setTask(null);
   
                   $em->persist($tag);
   
                   // if you wanted to delete the Tag entirely, you can also do that
                   // $em->remove($tag);
               }
   
               $em->persist($entity);
               $em->flush();
   
               // redirect back to some edit page
               return $this->redirect($this->generateUrl('we_aktionen_edit', array('id' => $id)));
       
        return $this->render('XxxXxxxBundle:Aktionen:edit.html.twig', array(
            'entity'      => $entity,
            'edit_form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
        ));
    }
cartmanac
Junior Member
 
Posts: 2
Joined: Sun Jun 03, 2012 12:29 am

Re: Delete record from embedded Form

Postby lukis » Sun Jul 15, 2012 5:22 pm

removeElement() is ArrayCollection method:
Code: Select all
$tag->getAktionenProdukte()->removeElement($entity);
User avatar
lukis
Faithful Member
 
Posts: 271
Joined: Wed Aug 13, 2008 12:35 pm
Location: Poland


Return to General Symfony 2 discussion

Who is online

Users browsing this forum: No registered users and 6 guests