cakePHP+MySQLでトランザクション | ユーリの備忘録

ユーリの備忘録

日々の生活で思ったことや仕事の中で見つけたことなんかを記録。

cakePHPはMySQLと相性がいいが、トランザクションにちょっと癖がある。


通常、


$this->Model->begin();


でトランザクションが開始されるのだが、cakePHPでは単純に


BEGIN


というSQLを流しやがる。PostgreSQLならいいが、MySQLじゃだめじゃん…。


というわけで以下のソースをAppModelに追加すると正常にトランザクションができる。


function begin() {

  $db =& ConnectionManager::getDataSource($this->useDbConfig);

  $db->begin($this);

}


function commit() {

  $db =& ConnectionManager::getDataSource($this->useDbConfig);

  $db->commit($this);

}


function rollback() {

  $db =& ConnectionManager::getDataSource($this->useDbConfig);

  $db->rollback($this);

}


これでちゃんと START TRANSACTION と流れるっぽい。

コミットは、$this->Model->commit();

ロールバックは、$this->Model->rollback();

でOK。

よかったよかった。