Symfony / Doctrine: транзакция с участием нескольких объектов / функций - PullRequest
1 голос
/ 03 мая 2011

Я хочу выполнить определенный набор операций над несколькими моделями / таблицами, используя Doctrine с Symfony.Вот что я делаю:

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);

}

Однако, когда возникает исключение (уровень кода или дБ), мне интересно, работает ли откат, поскольку я вижу, что некоторые записи сохраняются.

Насколько я понимаю, пока я открыл соединение, начал транзакцию, все методы, использующие соединение $ conn, выполняются в одной транзакции.Если что-то не получается, все откаты.

Я также пытался использовать точки сохранения, но я не смог с ними работать.Может ли кто-нибудь сказать мне, достаточно ли передать соединение, чтобы все запустило транзакцию?Это потому, что атрибут MySQL auto_committ установлен или что-то?Спасибо

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Ну, транзакции поддерживаются только над таблицами InnoDB, и я считаю, что некоторые из ваших таблиц являются MyISAM. Таким образом, откат работает только на InnoDB, и вы видите, что изменения в MyISAM остались без изменений.

1 голос
/ 03 мая 2011

просто попробуйте

catch (Exception $exc) {

                $conn->rollback();

        }

в вашей попытке ctach

или просто включите try catch для других функций *

...