2

owncloud 用のアプリを開発しており、アプリ フレームワークではなく、Owncloud API を使用しています。この環境では、SQL-Transactions 経由\OCP\DB::beginTransaction();で開始でき、トランザクション cia をコミットでき\OCP\DB::commit();ます。

しかし、トランザクションをロールバックする方法が見つかりません。私は一日中それをグーグルで検索し、Owncloud コア ファイルを検索しましたが、それを行う方法が見つかりませんでした。

誰もこれを行う方法を知っていますか? 今のところ、トランザクションは 1 つしかないため、ajax リクエストでトランザクションをコミットしないままにしておくことができます。しかし、他のスクリプトでは、互いに独立した複数のトランザクションを次々と実行する必要があります。何か問題が発生した場合に備えて、挿入されたすべての行を手動で削除する必要がありますが、これはあまり良くありません。

編集 2014/07/30:

私は、OC_DB_StatementWrapperOwncloud から返される\OCP\DB::prepare-Class がこれを行う方法を提供していないことを発見しました。ただし、すべての未知の呼び出しを基になる\Doctrine\DBAL\Driver\Statement-object に渡します。このクラスについては、 Doctrine.DBAL.Statementで説明しています。

トランザクションをロールバックするメソッドを持つプライベート$_conn( \Doctrine\DBAL\Connectionのインスタンス) があります。rollbackただし、$_connプライベートなのでアクセスできません。

4

1 に答える 1