
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
には、
トランザクションを実行するには、テーブルの種類がトランザクションをサポートしている必要があります。
全てのトランザクションメソッドは、モデルのデータソースオブジェクトが実行しなければなりません。モデルの内部でデータソースを取得するには、以下を使用してください。
[php]
$dataSource = $this->getDataSource();
[/php]これで、データソースを用いてトランザクションを開始・コミット・ロールバックすることができるようになりました。
とありました。
そのつどデータソースを取得して、ってのはちょっと面倒なので、以下のようにしてみました。
AppModel.phpに以下を記述。
[php]
function begin() {
$dataSource = $this->getDataSource();
$dataSource->begin($this);
}
function commit() {
$dataSource = $this->getDataSource();
$dataSource->commit($this);
}
function rollback() {
$dataSource = $this->getDataSource();
$dataSource->rollback($this);
}
[/php]
んで、使いたいところで下記を記述すれば、
beginで開始、commitで完了、rollbackでロールバックが可能。
[php]
$this->Model->begin();
[/php]
[php]
$this->Model->commit();
[/php]
[php]
$this->Model->rollback();
[/php]
[tgAmazonItemLookup asin="B003BS1D22" related="1"]