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();
是一起提交还是一起回滚。
在 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();
是一起提交还是一起回滚。