Igo*_*iuk 8 migration timestamp date laravel
我将项目从5.2升级到laravel 5.3.现在,当我想要运行时,php artisan migrate我收到错误:SQLSTATE [22007]:无效的日期时间格式:1292日期时间值不正确:第1行的'created_at'列的'0000-00-00 00:00:00'(SQL:alter table messagesadd deleted_attimestamp空值).我的迁移:
Schema::table(Models::table('messages'), function (Blueprint $table) {
$table->softDeletes();
});
Run Code Online (Sandbox Code Playgroud)
在Blueprint.php中:
public function softDeletes()
{
return $this->timestamp('deleted_at')->nullable();
}
Run Code Online (Sandbox Code Playgroud)
pat*_*cus 17
Laravel 5.3默认更新为使用MySQL"严格"模式,其中包括NO_ZERO_DATE模式.
问题是您的现有数据被允许将"0000-00-00 00:00:00"作为日期时间值.但是,现在您的连接使用的是不允许该值的SQL模式(NO_ZERO_DATE).当您尝试更改表以添加deleted_at列时,它会抱怨列中现有的数据违规created_at.
理想的解决方案是修复数据库中的所有数据.也就是说,遍历您的数据库并更新您的日期时间/时间戳字段,以便它们可以为空,并将其数据从"0000-00-00 00:00:00"转换为null.
但是,快速选项只是禁用数据库连接上的"严格"模式.打开config/database.php文件,确保显示数据库连接'strict' => false.
在带有时间戳(created 和 updated_at)的表中添加日期时间列时,我遇到了同样的问题。
我解决了在迁移中添加 '->nullable($value = true)' 修饰符的问题:
$table->datetime('expires_at')->nullable($value = true);
我知道如果输入不来,数据库会抱怨插入所有零。将指令添加为可为空的就行了。
| 归档时间: |
|
| 查看次数: |
8634 次 |
| 最近记录: |