【Cakephp3】addBehavior('Timestamp')で、created,modifiedに自動で日時を入れる。

やりたいこと

今回、フォームから問合せ内容を入力したらその内容と、問合せ日時が自動でDBに登録される機能を作った。

contactsTable

画像1

DBのテーブルには、対応完了日時を入れるためのカラムmodifiedを作り、このカラムには自動で日時を入れず、対応完了登録をしたときだけ日時を入れるようにしたい。

問題点

modifiedカラムの、 デフォルト値にしていたcurrent_timestamp()を「なし」に変更したが、フォームから問合せ内容を送った際、自動で日時が入ってしまう。

原因

AppTableにTimestampビヘイビアが書いてあった。

書いた覚えがないので、自動で作られているのかな?
これがあると、カラムのデフォルト設定でcurrent_timestamp()にしていなくても、自動で日時が入ってしまう。

対策

作成時点で日時を入れたいカラム(例えばcreated)には、カラムのデフォルト値でcurrent_timestamp()を入れる。

日時を入れたくないカラムには、current_timestamp()を外して、AppTableのTimestampビヘイビアを消すかコメントアウトすれば良い。

class AppTable extends Table
{
   // createdやmodifiedに、自動で日時を入れてくれる。
   // MySQLのテーブル上で、createdやmodifiedのデフォルト値に「current_timestamp()」をつけていなくても、
   // これを書くと自動で付与されるようになる。
   public function initialize(array $config)
   {
       parent::initialize($config);
       $this->addBehavior('Timestamp');
   }
}


この記事が気に入ったらサポートをしてみませんか?