2012-08-16 10 views
8

¿Hay alguna forma de especificar manualmente transacciones en symfony2 con el administrador de entidades (doctrina), o quizás una forma natural de lograr en una sola transacción lo que estoy haciendo abajo en dos?transacciones y administrador de entidades symfony2

// creating screen object... 
//Creating user object... 

     //flush the screen into database in order to get the Id to relate the server (user) to 
     $em->persist($screen); 
     $em->flush(); 

     //Get id of just inserted screen and attach that to new server (user) 
     $tempRecordId = $screen->getId(); 
     $tempEntity = $em->getRepository('BizTVContainerManagementBundle:Container')->find($tempRecordId); 
     $entity->setScreen($tempEntity); 

     //Flush the user also into database 
     $em->persist($entity); 
     $em->flush(); 

Ver debo limpiar mi primera entidad con el fin de obtener su ID, así que me puedo relacionar mi segunda entidad a la primera ...

Respuesta

7

Porqué no te acaba de hacer:

// creating screen object... 
//Creating user object... 
    $entity->setScreen($screen); 
    $em->persist($screen); 
    $em->persist($entity); 
    $em->flush(); 
+0

¡No tenía idea, era tan fácil! ¡Creo que lo estaba haciendo más complicado de lo necesario! –

22
try { 
    $em->getConnection()->beginTransaction(); 

    // do your thing here 

    $em->getConnection()->commit(); 
} catch (\Exception $e) { 
    $em->getConnection()->rollback(); 
    throw $e; 
} 
+0

@Elnur, es '$ em-> getConnection()', te pierdes el '()', gracias de todos modos –

+0

@ Kstro21, corregido. Gracias. –

Cuestiones relacionadas