public function load(ObjectManager $manager) { $users = array('pepe' => array('name' => 'Pepe', 'addresses' => array(array('street' => 'Calamar 23', 'city' => 'valencia'), array('street' => 'Perico 3', 'city' => 'lagos'))), 'juan' => array('name' => 'Juan', 'addresses' => array(array('street' => 'Castellana 45', 'city' => 'madrid'))), 'manuel' => array('name' => 'Manuel', 'addresses' => array(array('street' => 'Principal 94', 'city' => 'fafe')))); foreach ($users as $username => $user) { $newUser = new User(); $newUser->setUsername($username); $profile = new Profile(); $profile->setName($user['name']); $newUser->setProfile($profile); $addresses = new ArrayCollection(); foreach ($user['addresses'] as $address) { $newAddress = new Address(); $newAddress->setStreet($address['street']); $city = sprintf('city-%s', $address['city']); $newAddress->setCity($this->getReference($city)); $addresses->add($newAddress); } $newUser->setAddresses($addresses); $manager->persist($newUser); } $manager->flush(); }
/** * @Route("/forms/user/{username}/edit", name="examples_forms_user_edit") * @ParamConverter("user", class="MainBundle:User") * @Template("MainBundle:Example\Form:edit_user.html.twig") */ public function userEditAction(User $user, Request $request) { $originalAddresses = array(); // Create an array of the current Address objects in the database foreach ($user->getAddresses() as $address) { $originalAddresses[] = $address; } $form = $this->createForm(new UserType(), $user); if ($request->isMethod("POST")) { $form->bind($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); // filter $originalAddresses to contain adressess no longer present foreach ($user->getAddresses() as $address) { foreach ($originalAddresses as $key => $toDel) { if ($toDel->getId() === $address->getId()) { unset($originalAddresses[$key]); } } } // remove the relationship between the address and the Task foreach ($originalAddresses as $address) { // remove the Address from the User $user->getAddresses()->removeElement($address); // if you wanted to delete the Address entirely, you can also do that $em->remove($address); } $em->persist($user); // $em->flush(); $flashBag = $this->get('session')->getFlashBag(); $flashBag->add('smtc_success', 'Se ha editado un usuario:'); $flashBag->add('smtc_success', sprintf('Username: %s', $user->getUsername())); $flashBag->add('smtc_success', sprintf('Nombre: %s', $user->getProfile()->getName())); if (0 !== count($user->getAddresses())) { $flashBag->add('smtc_success', 'Direcciones:'); foreach ($user->getAddresses() as $address) { $flashBag->add('smtc_success', sprintf(' %s (%s)', $address->getStreet(), $address->getCity()->getName())); } } return $this->redirect($this->generateUrl('examples_forms')); } } return array('form' => $form->createView(), 'user' => $user); }