升级到laravel 5.3后出错无效日期时间格式:1292日期时间值不正确:'0000-00-00 00:00:00'

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.


muk*_*ade 5

在带有时间戳(created 和 updated_at)的表中添加日期时间列时,我遇到了同样的问题。

我解决了在迁移中添加 '->nullable($value = true)' 修饰符的问题:

$table->datetime('expires_at')->nullable($value = true);

我知道如果输入不来,数据库会抱怨插入所有零。将指令添加为可为空的就行了。