2012-08-16 30 views
8

Có cách nào để xác định thủ công các giao dịch trong symfony2 với trình quản lý thực thể (doctrine), hoặc có lẽ một cách tự nhiên để hoàn thành trong một giao dịch đơn lẻ mà tôi đang làm dưới đây?giao dịch và quản lý thực thể 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(); 

Xem Tôi phải tuôn thực thể đầu tiên của tôi để có được nó là ID ra, vì vậy tôi có thể liên hệ thực thể thứ hai của tôi để đầu tiên của tôi ...

Trả lời

7

Tại sao những bạn chỉ cần làm:

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

Không có ý tưởng nào là dễ dàng! Tôi đoán tôi đã làm cho nó phức tạp hơn nó cần phải được huh! –

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

    // do your thing here 

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

@Elnur, là '$ em-> getConnection()', bạn bỏ lỡ '()', nhờ anyway –

+0

@ Kstro21, cố định. Cảm ơn. –

Các vấn đề liên quan