我把我的项目从5.2升级到了laravel 5.3.现在,当我想要运行php artisan migrate时,我收到错误:

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '0000-00-00 00:00:00' for column 'created_at' at row 1 (SQL: alter table 100 add 101 timestamp null).

My migration:

  Schema::table(Models::table('messages'), function (Blueprint $table) {
        $table->softDeletes();
  });

在蓝图中.php:

    public function softDeletes()
    {
        return $this->timestamp('deleted_at')->nullable();
    }

推荐答案

Laravel 5.3在默认情况下更新为使用MySQL"严格"模式,其中包括NO_ZERO_DATE模式.

问题是,您的现有数据被允许将"0000-00-00:00:00"作为日期时间值.但是,现在您的连接使用的sql模式不允许该值(NO_ZERO_DATE).当您试图更改表以添加deleted_at列时,它会抱怨created_at列中存在数据冲突.

The ideal solution would be to fix all the data in the database. That is, go through your database and update your datetime/timestamp fields so that they are nullable, and convert their data from '0000-00-00 00:00:00' to null.

但是,快速选项是在数据库连接上禁用"严格"模式.打开config/database.php文件,确保数据库连接显示'strict' => false.

Laravel相关问答推荐

laravel错误更新使用外键的数据库

在Laravel中URL中添加保护ID

如何在 Laravel 9 中获取带分页的订单列表?

使用正则表达式 laravel 忘记缓存

如何保存/重定向 Laravel Artisan 命令的输出?

Blade引擎:打印三重花括号

Lumen和 MongoDB?

在集合 laravel 中使用查询范围

如何在 Laravel 5.5 的 FormRequest 类中返回自定义响应?

如何使用 Laravel 模型访问数据库视图?

Laravel 4 定义 RESTful 控制器

PHP 中的 Http 响应代码枚举

Laravel:每当我返回一个模型时,总是返回一个与它的关系

使用 vue-router 更改路由时中止所有 Axios 请求

Eloquent 的 Model::query() 是什么意思?

如何使用中间件将标头添加到响应中?

laravel:Eloquent的例子将数据插入数据库

Laravel 4 简单路由无法使用 mod_rewrite 和 .htaccess

Laravel 5 Illuminate\Http\Request 的方法不允许静态调用

count() 参数必须是数组或在 laravel 中实现可数的对象