Измените тип данных в столбце с данными в laravel миграции - PullRequest
1 голос
/ 10 февраля 2020

Это миграция? мне нужно изменить столбец данных строки в столбец целых данных с существующими данными

public function up()
{
       Schema::table('SYS_tenants' ,function (Blueprint $table){
           $table->integer('tena_type')->unsigned()->nullable()->change();
           $table->foreign('tena_type')->references('id')->on('account_types');
       });
}

Ответы [ 4 ]

2 голосов
/ 10 февраля 2020

Согласно laravel Документации вы можете создать новую миграцию и сделать это следующим образом:

Schema::table('SYS_tenants', function (Blueprint $table) {
   $table->integer('tena_type')->unsigned()->nullable()->change();
});

Перед изменением столбца обязательно добавьте зависимость doctrine/dbal к вашему composer.json файл.

composer require doctrine/dbal

Ссылка: Laravel -> База данных: Миграции-> Изменение столбцов

0 голосов
/ 12 февраля 2020

Я уже использую это Laravel Миграция

$table->integer('tena_type')->unsigned()->nullable()->change();

Но это не работает, потому что данные уже есть в таблице. В этом случае он не может изменить тип данных. Я использую этот оператор DB, чтобы изменить тип данных с data.it работает правильно.

DB::statement("alter table SYS_tenants modify tena_type integer not null"):

0 голосов
/ 10 февраля 2020

Вы можете использовать метод change для поля, для которого вы хотите изменить тип после установки нового типа поля.

public function up() {
    Schema::table('SYS_tenants' ,function (Blueprint $table){

        $table->string('tena_type')->change();   
    });
}

Я предполагал, что миграция, создающая таблицу, уже вызовет все ваши требования нужно как unique, nullable и тд. Вы можете вызвать метод change, кстати, нет никаких ограничений в отношении любых изменений, которые вы хотите выполнить, например, добавьте другой индекс mysql в это поле.

Не забудьте добавить doctrine/dbal в composer.json файле

0 голосов
/ 10 февраля 2020

Миграции # Изменение столбцов

Похоже, что у вас должно работать:

Schema::table('SYS_tenants' ,function (Blueprint $table){
    $table->integer('tena_type')->unsigned()->nullable()->change();
});

В зависимости от вашей базы данных вам может потребоваться преобразовать значения в новое тип: (для mysql: https://www.mysqltutorial.org/mysql-cast/)

...