自動生成されたマイグレーションファイルがマイグレートできない。

CakePHP

自動生成されたマイグレーションファイルがマイグレートできませんでした。

エラーはこんな感じ

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for ‘updated’

環境

CakePHP4.2(3系でも同様と思われます)
MariaDB 10.3.27-MariaDB – MariaDB Server

現象

マイグレーションファイルを作成して

# ./bin/cake bake migration_snapshot Initial

テーブルを削除後にマイグレーションを実行する。

# bin/cake bake migrations migrate

 

原因と解決方法

日付のカラムでデフォルト値にcurrent_timestampを設定しているとこのようになるようです。
migration_snapshot が出力するマイグレーションファイルが正しくないようなので、マイグレーションファイルを手動で修正する必要があります。

config/Migrations/日付と時刻_Initial.php

//’default’ => ‘current_timestamp()’, //これを
‘default’ => ‘CURRENT_TIMESTAMP’, //こうする

これを全部のカラムに対して書き換えます。current_timestamp()をCURRENT_TIMESTAMPで置換してあげればOKです。

差分抽出(migration_diff)で生成されたマイグレーションファイルも同様だと思いますので、同じように確認して書き換える必要があるかと思います。

いつごろか忘れましたが、3.x系を使っているときもこの問題があった記憶があるので治ってないみたいですね。

タイトルとURLをコピーしました