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