CakePHP4_migrationでdatetimeカラムが追加できない


まえがき

CakePHPのmigrationを利用した際に発生したエラーの対処法となります。

バージョン

CakePHP4

手順

・Usersテーブルにmigrationでcreatedカラムを追加する

20210801024646_ChangeUsers.php
    public function change()
    {
        $table = $this->table('users');
        $table->addColumn('created', 'datetime');
        $table->update();
    }

※上記のmigrationファイルでmigrate実行するとエラーが発生
bin\cake migrations migrate

PDOException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '0000-00-00 00:00:00' for column `proto_todo`.`users`.`created` at row 1 in C:\xampp\htdocs\cakephp_apps\todo\vendor\robmorgan\phinx\src\Phinx\Db\Adapter\PdoAdapter.php:194

設定情報はシンプルなものなのですが、何度実行しても失敗してしまいます。
原因を調査した結果、以下の内容に変更すると成功しました。

20210801024646_ChangeUsers.php
    public function change()
    {
        $table = $this->table('users');
        $table->addColumn('created', 'datetime', [
            'null' => true // NULLを許容
        ]);
        $table->update();
    }

bin\cake migrations migrate

原因

エラーが発生した原因としては、既にテーブル上に登録されているデータが悪さをしていたようでした。
addColumnsが処理される際、既存レコードのcreatedに対しては'0000-00-00 00:00:00'が登録される動きになるようです。
しかしcreatedカラムはnullを許容していなかった為エラーが発生してしまった様です。
上記を踏まえカラムをnull許容する事で正常にmigrationが行われました。

考えれば分かる事でした。。余計な時間を使ってしまった。。。