読者です 読者をやめる 読者になる 読者になる

元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

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とか)の場合は、そちらのトランザクション操作を使うべきでしょう。