Laravel -Unable to change datatype from bigInteger to Date

i've a migration like below

public function up()
{
    Schema::create('live_classes', function (Blueprint $table) {
            $table->bigInteger('time');
        });
}
public function down()
{
    Schema::dropIfExists('live_classes');
}

i wanted to change the datatype of the column time from bigInteger to date.i tried like below.

public function up()
 {
    Schema::table('live_classes', function (Blueprint $table) {
                $table->date('time')->nullable()->change();
            });
}
public function down()
{
    Schema::table('live_classes', function (Blueprint $table) {
        $table->bigInteger('time');
    });
}

This is not working.it shows the below error.How can i fix this?

Illuminate\Database\QueryException

  SQLSTATE[42804]: Datatype mismatch: 7 ERROR:  column "time" cannot be cast automatically to type date
HINT:  You might need to specify "USING "time"::date". (SQL: ALTER TABLE live_classes ALTER "time" TYPE DATE)

  at C:\wamp\www\Flotilla\Eustard-customers-Laravel-API-\vendor\laravel\framework\src\Illuminate\Database\Connection.php:703
    699▕         // If an exception occurs when attempting to run a query, we'll format the error
    700▕         // message to include the bindings with SQL, which will make this exception a
    701▕         // lot more helpful to the developer instead of just the database's errors.
    702▕         catch (Exception $e) {
  ➜ 703▕             throw new QueryException(
    704▕                 $query, $this->prepareBindings($bindings), $e
    705▕             );
    706▕         }
    707▕     }

  1   C:\wamp\www\Flotilla\Eustard-customers-Laravel-API-\vendor\laravel\framework\src\Illuminate\Database\Connection.php:492
      PDOException::("SQLSTATE[42804]: Datatype mismatch: 7 ERROR:  column "time" cannot be cast automatically to type date
HINT:  You might need to specify "USING "time"::date".")

  2   C:\wamp\www\Flotilla\Eustard-customers-Laravel-API-\vendor\laravel\framework\src\Illuminate\Database\Connection.php:492
      PDOStatement::execute()

4 answers

  • answered 2021-11-29 05:18 POONAM KHATRI

    You need to install package doctrine/dbal migrations in laravel,in order to makes changes in laravel migrations By using command

    composer require doctrine/dbal
    

    After that create new migration and use your above code

  • answered 2021-11-29 06:42 POONAM KHATRI

    I have make changes like this and write down your laraver version whatever you have like this "7.29.*"

    kyE1.jpg

  • answered 2021-11-29 07:01 POONAM KHATRI

    And you have made mistake in your down function, your down and up function should have same code,you have put biginteger in your down funtion that is another mistake,it should be like this

     public function up()
    {
        Schema::table('live_classes', function (Blueprint $table) {
            $table->time('time')->change();
        });
    }
    
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('live_classes', function (Blueprint $table) {
            $table->time('time')->change();
        });
    }
    

  • answered 2021-11-29 08:02 Davit Papalashvili

    You can create a new migration and change just one column type:

    public function up()
    {
        Schema::table('sometable', function (Blueprint $table) {
            $table->date('time')->change();
        });
    }
    

    You need to install doctrine/dbal to make this work

    composer require doctrine/dbal
    

How many English words
do you know?
Test your English vocabulary size, and measure
how many words do you know
Online Test
Powered by Examplum