質問: Database_Connection::instance(); $db->start_transaction(); try { // // データベースの更新処理など // $db->commit_transaction(); catch (\Exception $ex) { $db->rollback_transaction(); } ``` と実装すればよさそうですが。。。 調べてもいまいちヒットしないため ご質問させて頂きます。 ご教授のほど、宜しくお願いします。
回答: FuelPHPには詳しくないことはあらかじめお断りしておきます。 さて、FuelPHPの公式フォーラムに以下の質疑を見つけました。 ORM Transactions - FuelPHP » Forums 質問: > > Is it possible to use transaction with ORM. I need to do a "select ... for update" transaction but can't really find a way to do this with ORM. > > > 回答: > > ORM doesn't have any built-in transaction methods, other then on save(), to put related updates into a transaction. > > > You can wrap your ORM calls into a transaction manually using > > > 回答者は FuelPHP のプロジェクトリーダーである Harro Verton 氏です。 この質疑があったのが2013年9月で FuelPHP 1.7 がリリースされる少し前のようです。どこまで現状でも有効な話なのかまでは確認していませんが、上記の回答によると単純に明示的にトランザクション開始メソッドとコミットメソッドでラップしてくれということのようです。 上記回答のリンク先に貼られていたスニペットは僅かに以下のようなものでした。 ``` start_transaction(); // do your stuff // or rollback_transaction(); $db ->commit_transaction(); ``` ですので、考え方としては質問に挙げられていた方法で差し支えなさそうに思われます。 もちろんこのときには `\ORM\Model->save()` ではトランザクションスイッチを無効にしておく必要があるものと思われます。