タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

MT::Object でのトランザクション Data::ObjectDriverを直接触っちゃう編

MT::Object(というより親クラスのData::ObjectDriver::BaseObject)にはトランザクション操作用のbegin_workなどが用意されています。

MT::Object でのトランザクション(Rollback / Commit) - フリーエンジニアライフ

ただ、

MTのデータベースで任意のSQLを実行して結果を取得する - フリーエンジニアライフ

のような直接Data::ObjectDriverでSQLを実行するようなケースでは、同じようにしてData::ObjectDriverを利用した方がキモチイイです。

my $class = MT->model('entry');
$class->driver->begin_work;
eval {
    # 更新処理など
};
if ( my $errstr = $@ ) {
    $class->driver->rollback;
} else {
    $class->driver->commit;
}

MT::Objectのインスタンスメソッド(saveとか)の場合は、そちらのトランザクション操作を使うべきでしょう。