栃木県のJavaエンジニア、WEBプログラマーのためのサイト

2016.05.30[CakePHP] Model::save()でmodifiedを必ず更新

modifiedとupdated

modified または updated を DBテーブルに定義しておくと、CakePHP は save時に自動的に更新日時をセットしてくれます。ただし、保存するデータに modified / updated のフィールドが含まれていない場合です。
データを更新する時は、大抵の場合 Model::find() で取得したデータを書き換えて Model::save() しますが、modified / updated を消し忘れて、更新日時が記録されていないことが多々あります。

そういう場合は AppModel で save() をオーバーライドして、modified / updated を消しておきましょう。

public function save($data = null, $validate = true, $fieldList = array()) {
    // 保存前に modified / updated フィールドをクリアする
    $this->set($data);
    if (isset($this->data[$this->alias]['modified'])) {
        unset($this->data[$this->alias]['modified']);
    }
    if (isset($this->data[$this->alias]['updated'])) {
        unset($this->data[$this->alias]['updated']);
    }
    return parent::save($this->data, $validate, $fieldList);
}