为什么 Laravel 8 迁移的文件无法在 SQL 客户端中工作的 SQL 查询?



从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_atupdated_at列之后工作,然后工作。

一个更快的解决方案是在数据库连接上禁用"strict"模式。

严格模式控制MySQL如何处理INSERTUPDATE等数据更改语句中的无效或缺失值。

您可以打开config/database.php文件,并确保数据库连接显示'strict' => false

但是,理想的解决方案是修复数据库中的所有数据。也就是说,遍历数据库,更新日期时间/时间戳字段,使其可以为null,并将其数据从'0000-00-00 00:00:00'转换为NULL。您还可以通过修改迁移来完成此操作。

最新更新