Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I delete an entity from symfony2

My first symfony2 project is a list of guests (invited in an event) stored in a database. I have

  • created the entity class Guest with all variables for them (id, name, address, phone number etc.)
  • created the schema in the mysql db
  • created a route for "adding a guest" to a twig template
  • created a formType

and finally a "createGuest" method in the Controller and everything works fine.

I can't manage to remove a guest from the database. I have read every tutorial in the web, including the official Symfony2 book; all that it says is :

Deleting an Object

Deleting an object is very similar, but requires a call to the remove() method of the entity manager:

$em->remove($product); $em->flush(); 

It does not say anything more than that (even the "Update an object" section is missing documentation) on how to connect the controller deleteAction($id) with the twig template. What I want to do is to list all guests with a viewGuests action and a viewGuests twig template, having a delete icon next to every row, which you should click to delete an entry. Simple, but I cannot find any documentation and do not know where to start from.

public function deleteGuestAction($id)     {         $em = $this->getDoctrine()->getEntityManager();         $guest = $em->getRepository('GuestBundle:Guest')->find($id);          if (!$guest) {             throw $this->createNotFoundException('No guest found for id '.$id);         }          $em->remove($guest);         $em->flush();          return $this->redirect($this->generateUrl('GuestBundle:Page:viewGuests.html.twig'));     } 
like image 246
Radolino Avatar asked Aug 04 '12 15:08

Radolino


People also ask

What is Symfony Doctrine?

Symfony provides all the tools you need to use databases in your applications thanks to Doctrine, the best set of PHP libraries to work with databases. These tools support relational databases like MySQL and PostgreSQL and also NoSQL databases like MongoDB.


2 Answers

Symfony is smart and knows how to make the find() by itself :

public function deleteGuestAction(Guest $guest) {     if (!$guest) {         throw $this->createNotFoundException('No guest found');     }      $em = $this->getDoctrine()->getEntityManager();     $em->remove($guest);     $em->flush();      return $this->redirect($this->generateUrl('GuestBundle:Page:viewGuests.html.twig')); } 

To send the id in your controller, use {{ path('your_route', {'id': guest.id}) }}

like image 167
Jérôme Boé Avatar answered Oct 10 '22 16:10

Jérôme Boé


DELETE FROM ... WHERE id=...;

protected function templateRemove($id){     $em = $this->getDoctrine()->getManager();     $entity = $em->getRepository('XXXBundle:Templates')->findOneBy(array('id' => $id));      if ($entity != null){         $em->remove($entity);         $em->flush();     } } 
like image 42
websky Avatar answered Oct 10 '22 16:10

websky