プロジェクトを Laravel 5.2 から 5.3 にアップグレードしました。実行しようとすると、php artisan migrate
次のエラーが発生します:
SQLSTATE[22007]: 無効な日時形式: 1292 不正な日時値: '0000-00-00 00:00:00' (行 1 の列 'created_at') (SQL: alter table
messages
adddeleted_at
timestamp null)。
私の移住:
Schema::table(Models::table('messages'), function (Blueprint $table) {
$table->softDeletes();
});
Blueprint.php の場合:
public function softDeletes()
{
return $this->timestamp('deleted_at')->nullable();
}
ベストアンサー1
Laravel 5.3 は、モードを含む MySQL の「厳密」モードをデフォルトで使用するように更新されましたNO_ZERO_DATE
。
問題は、既存のデータに日時値として「0000-00-00 00:00:00」が許可されていることです。しかし、現在、接続ではその値を許可しない SQL モードが使用されています ( NO_ZERO_DATE
)。テーブルを変更して列を追加しようとするとdeleted_at
、列内の既存のデータ違反についてエラーが発生しますcreated_at
。
理想的な解決策は、データベース内のすべてのデータを修正することです。つまり、データベースを調べて、datetime/timestamp フィールドを null 値が許可されるように更新し、そのデータを '0000-00-00 00:00:00' から null に変換します。
ただし、簡単なオプションとしては、データベース接続で「厳密」モードを無効にするだけです。config/database.php
ファイルを開き、データベース接続が と表示されていることを確認します'strict' => false
。