17682


FuelPHP(1.7)でご質問させてください。  
ORMモデルを利用したDB操作の一連のロジック(基本的な)を作成する場合  
トランザクション処理はどのようにして実装すればよろしいのでしょうか？

クエリビルダであれば

[code]

    $db = Database_Connection::instance();
    $db->start_transaction();
    
    try {
      //
      // データベースの更新処理など
      //
      $db->commit_transaction();
    catch (\Exception $ex) {
      $db->rollback_transaction();
    }
    
[/code]

と実装すればよさそうですが。。。

調べてもいまいちヒットしないため  
ご質問させて頂きます。

ご教授のほど、宜しくお願いします。


CC BY-SA 3.0
2015-10-13T05:21:48.657
17584
2015-10-15T12:04:46.943
2015-10-13T05:40:06.580
5839
5839
question
php fuelphp orm
FuelPHPのORMモデルを使う場合、トランザクション処理は可能か？


FuelPHPには詳しくないことはあらかじめお断りしておきます。  
さて、FuelPHPの公式フォーラムに以下の質疑を見つけました。

[ORM Transactions - FuelPHP »
Forums](http://fuelphp.com/forums/discussion/12563)

質問：

> 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
> <http://bin.fuelphp.com/snippet/view/oA>

回答者は FuelPHP のプロジェクトリーダーである [Harro Verton](http://fuelphp.com/about) 氏です。

この質疑があったのが2013年9月で FuelPHP 1.7
がリリースされる少し前のようです。どこまで現状でも有効な話なのかまでは確認していませんが、上記の回答によると単純に明示的にトランザクション開始メソッドとコミットメソッドでラップしてくれということのようです。  
上記回答のリンク先に貼られていたスニペットは僅かに以下のようなものでした。

[code]

    <?php
    
    $db = \Database_Connection::instance(\Model_Yours::connection(true));
    $db->start_transaction();
    
    // do your stuff
    
    // or rollback_transaction();
    $db ->commit_transaction();
    
[/code]

ですので、考え方としては質問に挙げられていた方法で差し支えなさそうに思われます。  
もちろんこのときには `\ORM\Model->save()` ではトランザクションスイッチを無効にしておく必要があるものと思われます。


CC BY-SA 3.0
2015-10-15T10:55:52.213
17682
2015-10-15T12:04:46.943
2015-10-15T12:04:46.943
10492
10492
17584
answer