1

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

1 回答 1

3

您引用的示例使其相当简单。你的错误是你在你的问题中所说的思考The connection is made to a single database table "Account":。没有一个连接总是指向整个数据库。Propel 只是提供了一种获取使用表作为参数的连接句柄的方法,这让我感到困惑。

你做

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

在任何桌子上,只是为了获得$con连接句柄。

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

所以一旦你有了$con句柄,你就开始交易

$con->beginTransaction();

以及您在该声明和

$con->commit();

或者

$con->rollback();

将全部一起提交或全部一起回滚。

于 2015-09-17T08:30:43.347 回答