DBに登録する時に使う「トランザクション」ですが、CakePHP2.xでの方法をまとめます。
あんまり Cake1.3 と変わってなかったので、一安心です。
動作は CakePHP2.3.6 で試しています。
DBのトランザクションについて
まずは公式を確認。
には、
トランザクションを実行するには、テーブルの種類がトランザクションをサポートしている必要があります。
全てのトランザクションメソッドは、モデルのデータソースオブジェクトが実行しなければなりません。モデルの内部でデータソースを取得するには、以下を使用してください。
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でロールバックが可能。
開始
$this->Model->begin();
完了
$this->Model->commit();
ロールバック
$this->Model->rollback();
