从SQL客户端(如SQLPlus(运行这样的更新效果良好:
alter table `questions` add constraint `questions_question_display_format_id_foreign` foreign key (`question_display_format_id`) references `question_display_formats` (`id`);
然而,在部署期间从Laravel运行迁移时,观察到以下错误:
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '0
000-00-00 00:00:00' for column 'updated_at' at row 6446 (SQL: alter table `
questions` add constraint `questions_question_display_format_id_foreign` fo
reign key (`question_display_format_id`) references `question_display_forma
ts` (`id`))
我想了解原因,以及在进行部署时如何避免此类意外。此示例在大规模更新条目,使其不具有包含零的created_at
和updated_at
列之后工作,然后工作。
一个更快的解决方案是在数据库连接上禁用"strict"
模式。
严格模式控制MySQL如何处理INSERT
或UPDATE
等数据更改语句中的无效或缺失值。
您可以打开config/database.php文件,并确保数据库连接显示'strict' => false
。
但是,理想的解决方案是修复数据库中的所有数据。也就是说,遍历数据库,更新日期时间/时间戳字段,使其可以为null,并将其数据从'0000-00-00 00:00:00'
转换为NULL
。您还可以通过修改迁移来完成此操作。