php - Propel2 中有多个表的事务

标签 php mysql pdo transactions propel2

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

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

如何获取全局 PDO 连接对象或与 2 个表(例如“帐户”和“书籍”)的连接?

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

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

最佳答案

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

你会

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

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

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

所以一旦你有了$con句柄,你就开始了一个事务

$con->beginTransaction();

以及您在该声明与

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

$con->rollback();

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

关于php - Propel2 中有多个表的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612911/

相关文章:

mysql - 无法在分配的表中添加外键约束

mysql - MYSQL 中的规范化

php - INSERT 不适用于 PDO 准备好的语句

php - 自动换行不让数字也换行

php - 如何使用 phpunit 测试确保数据传递到 View 具有 Laravel 中的特定键

php - 使用 php 为所有文件格式查找 Mime 类型的文件或 url

php - 上传同一个表中的多个文件时出错

php - Silex 存储库 SQL 转义单引号问题

mysql - 与多个表之一相关的数据库列

php - Uncaught Error : Call to a member function userDetails() on null