はじめに
DBのデータ更新の際に
foreach ( $value as $val) {
$this->Model->create()
$this->Model->save()
}
上記記述のように複数のUpdate処理を行う際に、更新対象ではないデータ更新が行われる事象が発生した。
今回はその事象への対応方法の備忘録です。
使用環境
PHP5.4.16
CakePHP2
原因
$this->Model->create()
CakePHPではcreateした時に、引数の配列が設定されていなければDBで設定されているデフォルト値を挿入するようになっているとのこと。
そのため本来更新行わないカラムもデフォルト値による更新が発生している。
対応方法
create引数にnullかfalseを渡して使用する
$this->Model->create(null)
$this->Model->create(false)
上記のように記述することでcreateメソッド使用時のデフォルト値の挿入がされなくなるため、不要なデフォルト値による更新が発生しなくなる。
あとがき
何気なく使っているメソッド等も中ではどのような動作をしているか知らなかったため今回のような不具合が発生した。
なのでメソッドの中身を調べておかないと同じように内部の動作を理解してないが故の不具合が発生するかもしれないので今後は勉強する必要がある。