Laravel Migrations - Issues while creating timestamps

后端 未结 10 580
深忆病人
深忆病人 2021-02-05 15:35

I am trying to run migrations on my Laravel instance. They are just the default migrations (users and password resets) but when it tries to make the timestamps it throws this e

相关标签:
10条回答
  • 2021-02-05 16:15

    I have been facing the same error. Given solutions does work properly still i want to help laravel developers. Simply add a following line to config/database.php

    'mysql' => array(
       'strict'    => true
    ),
    
    0 讨论(0)
  • 2021-02-05 16:15

    I have used the following method:

    $table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
    $table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
    

    Really worked!

    0 讨论(0)
  • 2021-02-05 16:16

    This is due to MySQL not accepting zero as a valid default date and thus the table creation fails a constraint check on creation.

    You probably have NO_ZERO_DATE enabled in your MySQL configuration. Setting this to off will allow you to create the table or alternatively remove the default 0 value or change it to CURRENT_TIMESTAMP.

    You can find out more about this exact issue here: https://github.com/laravel/framework/issues/3602

    0 讨论(0)
  • 2021-02-05 16:20

    This is due to MySQL not accepting zero as a valid default date so you can write

    $table->timestamp('created_at')->nullable();
    $table->timestamp('updated_at')->nullable();
    

    or $table->nullableTimestamps();

    Instead of $table->timestamps();

    0 讨论(0)
  • 2021-02-05 16:25

    you should disable MySQL strict mode on Laravel. MySQL has had a strict mode since 5.1, but in 5.7 it became the default. In Laravel, you can fix this in code: edit your database.php config file, and add a key of strict with a value of false.

    for non-Laravel users:

    if you're using a non-Laravel application,you won't have that option.Here's how to disable strict mode globally.find your MySQL configuration file my.cnf or my.ini the default MySQL configuration will live in /etc/mysql/my.cnf

    open the file and find the [mysqld] section.We're going to add a new key, sql_mode On MySQL 5.7, the default values for this key out of the box are:

    STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    The strict mode comes from STRICT_TRANS_TABLES. So, let's overwrite the sql_mode to:

    [mysqld]
    sql_mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    That's it! Save the file, and restart MySQL.

    0 讨论(0)
  • 2021-02-05 16:28

    Migrating old tables works like that:

    Schema::table(
                'table',
                function (Blueprint $table) {
                    $table->dateTime('created_at')->nullable()->default(NULL)->change();
                    $table->dateTime('updated_at')->nullable()->default(NULL)->change();
                }
            );
    

    from https://github.com/laravel/framework/issues/3602

    0 讨论(0)
提交回复
热议问题