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。
よかったよかった。