Symfony: Транзакции.

Как известно известный фреймворк Symfony на php 5 использует ORM генератор Propel. Что мне нравиться в propel, так это то, что независимо от базы, будь то SQLite или MyISAM которые не поддерживают транзакций, propel для любой операции генерит методы, которые откатывают изменения в случае неудачи. То есть всегда есть

$con = Propel::getConnection(MyPeer::DATABASE_NAME);
$con->begin();
<some database actions>
$con->commit();

В случае неудачи произойдет откат $con->rollback();

Недавно наткнулся на то, что такие транзакции можно делать вручную не только для одного объекта, но и для сохранения как частного случая, целой цепочки объектов. Например:

try {

    $con->begin();

    $obj1->save($con);
    $obj2->save($con);  
    MyPeer::doDelete($obj3, $con);

    $con->commit();

  } catch (Exception $e) {
     $con->rollback();
     throw $e;
  }

По мотивам http://propel.phpdb.org/trac/wiki/Users/Documentation/1.2/HowTos/Transactions



Нет комментариев

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Комментарий: