0
0

CakePHPのModelのcreateメソッド使用時のデフォルト値の挿入について

Last updated at Posted at 2023-09-15

はじめに

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メソッド使用時のデフォルト値の挿入がされなくなるため、不要なデフォルト値による更新が発生しなくなる。

あとがき

何気なく使っているメソッド等も中ではどのような動作をしているか知らなかったため今回のような不具合が発生した。
なのでメソッドの中身を調べておかないと同じように内部の動作を理解してないが故の不具合が発生するかもしれないので今後は勉強する必要がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0