2

我正在为 owncloud 开发一个应用程序,并且正在使用 Owncloud API,而不是 App Framework。在这种环境中,我可以通过启动 SQL-Transactions\OCP\DB::beginTransaction();并且可以提交事务 cia \OCP\DB::commit();

但我找不到回滚事务的方法。我用谷歌搜索了一整天并搜索了 Owncloud 核心文件,但找不到方法。

有谁知道如何做到这一点?现在我可以在我的 ajax 请求中保留未提交的事务,因为它们只有一个事务。但是在其他脚本中,我必须一个接一个地进行多个独立于另一个的事务。如果出现任何问题,我必须手动删除所有插入的行,这不是很好。

编辑 2014/07/30:

我发现OwncloudOC_DB_StatementWrapper返回\OCP\DB::prepare的 -Class 没有提供执行此操作的方法。但是,它将所有未知调用传递给底层\Doctrine\DBAL\Driver\Statement-object。这个类在这里描述:Doctrine.DBAL.Statement

它有一个私有$_conn的(\Doctrine\DBAL\Connection的实例),它有一个rollback回滚事务的方法。但是,$_conn是私有的,所以我无法访问它。

4

1 回答 1

1

我自己终于找到了解决方案。对于那些对其工作原理感兴趣的人,这里是解决方案:

$conn = \OC::$server->getDatabaseConnection();
$conn->rollBack();

这将回滚之前通过\OCP\DB::beginTransaction()打开的事务。要开始新的交易,只需\OCP\DB::beginTransaction()再次调用 - 就像一个魅力。

于 2014-07-30T10:43:23.787 回答