在Propel2中与多个表进行交易

时间:2015-09-16 15:31:35

标签: php mysql pdo transactions propel2

在Propel2 ORM(http://propelorm.org/documentation/05-transactions.html)的文档中,有一个如何在事务中包装查询的示例。连接到单个数据库表"帐户":

$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME);

如何获得全局PDO连接对象或与2个表的连接(例如" Account"" Book")?

例如,我希望拥有的(伪代码):

$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME, 
                                  BookTableMap::DATABASE_NAME);

1 个答案:

答案 0 :(得分:3)

您引用的示例使其相当简单。您的错误正如您在问题中所说的那样思考连接到单个数据库表“帐户”:。始终没有连接到整个数据库。 Propel只提供了一种获取使用表作为参数的连接句柄的方法,让我感到困惑。

你做

$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME);

在任何表上,只是为了得到$con连接句柄。

事务由连接控制,而不是语句。因此,一旦拥有了连接对象,就可以启动事务,而事务的整个过程就是可以将该事务中的任意数量的表更改为单个工作单元(事务)。

因此,一旦您拥有$con句柄,就可以开始交易

$con->beginTransaction();

以及您在该声明与

之间所做的任何修改
$con->commit();

OR

$con->rollback();

将所有人一起提交或全部回滚。