CakePHP:トランザクション機能をつける

CakePHPのバージョン1.2系はトランザクション機能があるみたいだけれど、1.1系にはないようだったので、自前でつけた。といっても、そんなに難しいことはしてない。そもそもトランザクション自体、普通に

// Controller内で
$this->Model->execute(“SET AUTOCOMMIT=0”);
$this->Model->execute(“START TRANSACTION”);
:
if(…){
$this->Model->execute(“COMMIT”);
}else{
$this->Model->execute(“ROLLBACK”);
}

としてもできるので、面倒くさがらなければこれでもいいのですが、面倒です!

そこで、/cake/app_model.phpを/cake/app/以下にコピーして、これを編集。理由はモデルファイル全部でトランザクションを使えるようにするためです。ちなみに、私はMySQLしか使わないので、MySQL限定です。

class AppModel extends Model {

function __construct(){
parent::__construct();
}

/**
* トランザクション開始
*
*/
function begin(){
$this->execute(“SET AUTOCOMMIT=0”);
$this->execute(“START TRANSACTION”);
}

/**
* コミット
*
*/
function commit(){
$this->execute(“COMMIT”);
}

/**
* ロールバック
*
*/
function rollback(){
$this->execute(“ROLLBACK”);
}
}

としてみました。とりあえず、うまくいっているようです。
CakePHPは高速開発はできそうだけど、慣れるまでやはり時間かかりますね。でもかなり楽に思えます。

CakePHPガイドブックには、こういうトランザクションの情報とか載ってなかったから、できれば載せておいてほしかったなぁと思いました。


カテゴリー CakePHP | タグ | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です