我正在为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()
-像魅力一样工作。