private function insertUpdateProcessing(EntityManager $em, $data, $id = null) { $update = !is_null($id); try { $em->beginTransaction(); //Create or retrive entity if ($update) { $menu = $em->find('Model\\Menu', $id); } else { $menu = new Menu(); } //If update mode delete all items on db if ($update) { foreach ($menu->getChildren() as $child) { $em->remove($child); } } $menu->setName($data['menu_name']); $menu->setDescription($data['menu_description']); if ($update) { $em->merge($menu); } else { $em->persist($menu); } $em->flush(); $items = $this->processMenu($data, $menu->getId(), array()); foreach ($items as $item) { $menu->addMenuItem($item); } $em->merge($menu); $em->flush(); $em->commit(); } catch (\Exception $e) { $em->rollback(); throw $e; } return $menu->getId(); }