开发者

Symfony/Doctrine: Transaction involving multiple objects/functions

I want to perform a certain set of operations on multiple models/tables using Doctrine with Symfony. Here is what I'm doing:

public function myFunc()
{
        $conn = Doctrine_Manager::connection();
        try {
            $conn->beginTransaction();
            $prop_trans->save($conn);
            self::doSomething1($conn);
            $bill_appor->save($conn);
            // Final Committ
            $conn->commit();
            return $prop_trans;
        } catch (Exception $exc) {
            if ($conn)
                $conn->rollback();
            throw $exc;
        }
}

public function doSomething($conn)
{
       $obj = new Trans();
       // this function might create & save another child record
       $obj->doSomething2($conn); 
       $obj->save($conn);

}

However, when there is an开发者_StackOverflow社区 exception (code or db level), I wonder if the rollback works, as I see some records being saved.

My understanding is that, as long as I've opened a connection, begun a transaction, all methods using the connection $conn are running in the same transaction. If something fails, all rollback.

I also tried to use savepoints, but I haven't been able to work with them. Can someone pl tell me if passing the connection around is enough to make everything run the transaction? Is it because a MySQL auto_committ attribute is set or something? Thanks


Well, transactions are supported only over InnoDB tables and I believe, that some of your tables are MyISAM. So, rollback works only on InnoDB ones and you see changes to MyISAM ones left intact.


just try

catch (Exception $exc) {

                $conn->rollback();

        }

in your try ctach

or just put try catch on your other function as well

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜