cakePHP(2.X系)でのトランザクション、コミット、ロールバックについて。
cakePHPでトランザクションを書ける場合、Model内に
1 2 3 4 5 6 7 8 9 10 11 |
$dataSource = $this->getDataSource(); $dataSource->begin(); // 幾つかのタスクを実行する if (/*すべて成功*/) { $dataSource->commit(); } else { $dataSource->rollback(); } |
と書くことが一般的です。
http://book.cakephp.org/2.0/ja/models/transactions.htmlより引用。
ただし、ある程度の規模のWebアプリではトランザクションをスタートしてからコミットするまでに複数のモデルの処理を行うことが一般的です。
上記のソースではモデル内にトランザクション関連の処理を書いておりますが、そうのような処理の場合はトランザクション自体もモデルではなくコントローラー内に書くことになるでしょう。
その場合、トランザクションを管理する独立したモデルを用意しておき、そこから処理をよんだ方がよいでしょう。
ソースを書こうと思いましたが、検索元のリンクのほうがはるかにわかりやすいためリスペクトも込めて、リンクを貼ります。
【CakePHP 2.x】Controller内でトランザクションをかける
その他、参考にしたリンクは下記です。