CakePHP2.xでトランザクションする方法。
2015/01/11
DBに登録する時に使う、トランザクションですが、CakePHP2.xでの方法です。
こちらも Cake1.3とそう変わりませんが、忘備録としてポストです。
CakePHP2.3.6で試しています。
トランザクション - CakePHP Cookbook v2.x documentation
http://book.cakephp.org/2.0/ja/models/transactions.html
には、
トランザクションを実行するには、テーブルの種類がトランザクションをサポートしている必要があります。
全てのトランザクションメソッドは、モデルのデータソースオブジェクトが実行しなければなりません。モデルの内部でデータソースを取得するには、以下を使用してください。
1 $dataSource = $this->getDataSource();これで、データソースを用いてトランザクションを開始・コミット・ロールバックすることができるようになりました。
とありました。
そのつどデータソースを取得して、ってのはちょっと面倒なので、以下のようにしてみました。
AppModel.phpに以下を記述。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function begin() { $dataSource = $this->getDataSource(); $dataSource->begin($this); } function commit() { $dataSource = $this->getDataSource(); $dataSource->commit($this); } function rollback() { $dataSource = $this->getDataSource(); $dataSource->rollback($this); } |
んで、使いたいところで下記を記述すれば、
beginで開始、commitで完了、rollbackでロールバックが可能。
1 |
$this->Model->begin(); |
1 |
$this->Model->commit(); |
1 |
$this->Model->rollback(); |
[tgAmazonItemLookup asin="B003BS1D22" related="1"]