foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

CakePHP トランザクションを使う時は Model::saveAll() を使わないように

環境

問題

Model::saveAll() は内部でトランザクション処理をしている。
そのため、外側のロジックで制御しているつもりのトランザクションが、Model::saveAll() によって途中でコミットされてしまう。

対策

Model::saveAll() の第2引数へ array('atomic' => false) を渡す。

<?php
$this->Model->begin();
$this->Model->saveAll($items, array('atomic' => false);
$this->Model->commit();
?>