8

symfony2 でエンティティ マネージャー (ドクトリン) を使用して手動でトランザクションを指定する方法はありますか? または、以下で 2 つのトランザクションで行っていることを 1 つのトランザクションで達成する自然な方法はありますか?

// 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 を取得するために最初のエンティティをフラッシュする必要があるので、2 番目のエンティティを最初のエンティティに関連付けることができます...

4

2 に答える 2

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

    // do your thing here

    $em->getConnection()->commit();
} catch (\Exception $e) {
    $em->getConnection()->rollback();
    throw $e;
}
于 2012-08-17T07:20:45.937 に答える
7

どうしてあなたはただやらないのですか:

// creating screen object...
//Creating user object...
    $entity->setScreen($screen);
    $em->persist($screen);
    $em->persist($entity);
    $em->flush();
于 2012-08-16T22:24:05.427 に答える