使用Laravel迁移中的数据更改列中的数据类型

时间:2020-02-10 06:18:20

标签: laravel database-migration

这是迁移吗?我必须将字符串数据列更改为具有现有数据的整数数据列

Topology

4 个答案:

答案 0 :(得分:2)

根据laravel文档,您可以创建一个新的迁移并按以下步骤进行:

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

在修改列之前,请确保添加doctrine/dbal依赖项 到您的composer.json文件中。

composer require doctrine/dbal

参考:Laravel -> Database: Migrations-> Modifying Columns

答案 1 :(得分:0)

Migrations#Modifying Columns

看起来您所拥有的应该起作用:

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

根据您的数据库,您可能需要将值转换为新类型:(对于mysql:https://www.mysqltutorial.org/mysql-cast/

答案 2 :(得分:0)

设置新的字段类型后,可以在要更改类型的字段上使用change方法。

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

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

我认为创建表的迁移已经调用了您需要的所有需求,例如uniquenullable等。您可以调用change方法,对您要执行的任何修改都没有限制,例如在该字段上添加其他mysql索引。

不要忘记在doctrine/dbal文件中添加 composer.json

答案 3 :(得分:0)

我已经使用了Laravel迁移

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

但是它不起作用,因为表中已有数据。在这种情况下,它无法更改数据类型。我使用此DB语句来更改带有数据的数据类型。它工作正常。

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