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が行われました。
考えれば分かる事でした。。余計な時間を使ってしまった。。。
Author And Source
この問題について(CakePHP4_migrationでdatetimeカラムが追加できない), 我々は、より多くの情報をここで見つけました https://qiita.com/m_t_u_r_/items/9aaee281863192d4aa0c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .