回滚SQL-Transaction在Owncloud应用程序


Rollback SQL-Transaction in Owncloud App

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

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

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

编辑2014/07/30:

我发现OC_DB_StatementWrapper -Class是由Owncloud的'OCP'DB::prepare返回的,没有提供这样做的方法。但是,它将所有未知调用传递给底层'Doctrine'DBAL'Driver'Statement -对象。该类描述如下:doctrine . dba . statement

它有一个私有的$_conn ('Doctrine'DBAL'Connection的实例),它有一个方法rollback来回滚事务。然而,$_conn是私有的,所以我不能访问它。

我终于自己找到了解决办法。对于那些对它的工作原理感兴趣的人,下面是解决方案:

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

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