2012-08-16 70 views
8

有没有办法在实体管理器(doctrine)中手动指定symfony2中的事务,或者是在单个事务中完成我在下面做的两个事情的一种自然方式?Transactions和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(); 

见我必须刷新我的第一个实体,以获取它的ID了,所以我可以与我的第二个实体给我的第一...

回答

7

为什么难道你不只是做:

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

不知道这是那么简单!我想我会让它变得比它需要的更复杂! – 2012-08-17 19:56:09

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

    // do your thing here 

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

@Elnur,是'$ em-> getConnection()',你错过了'()',多亏了 – 2013-11-19 16:57:28

+0

@ Kstro21,修正了。谢谢。 – 2013-11-20 14:48:23