Propel2 中有一个以上 table 的交易

Transaction with more than one table in Propel2

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

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

如何获取全局 PDO 连接对象或到 2 table 的连接(例如 "Account" 和 "Book")?

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

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

您引用的示例非常简单。您的错误是按照您在问题中所说的那样思考 连接到单个数据库 table "Account":。没有连接总是到整个数据库。 Propel 只是提供了一种获取使用 table 作为参数的连接句柄的方法,我承认你很困惑。

你做

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

在任何 table 上,只是为了获取 $con 连接句柄。

事务由连接控制,而不是语句。所以一旦你有了连接对象,你就可以开始一个事务,而事务的全部意义在于你可以在该事务中将任意数量的 table 作为一个工作单元(事务)进行更改。

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

$con->beginTransaction();

以及您在该声明和

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

$con->rollback();

是一起提交还是一起回滚。