Laravel 迁移将列类型从 varchar 更改为 longText

Laravel migrations change a column type from varchar to longText

我需要将 $table->string('text'); 的迁移列类型更改为文本类型,我尝试了几种方法,但其中 none 行得通。是否可以在一次迁移中完成?我猜可以删除该列,然后使用新类型重新创建它,但我想知道是否可以在一次迁移中完成?

您可以创建一个新的迁移并且 change just one column type:

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

您需要安装 doctrine/dbal 才能正常工作

composer require doctrine/dbal

适用于 Laravel 5.0+。它不适用于 Laravel 4.2.

根据Laravel Doc

你可以这样做

Schema::table('yourTable', function (Blueprint $table) {
    $table->text('text')->change();
});

be sure to add the doctrine/dbal dependency to your composer.json file

可以进行 TABLE 迁移。

如其他帖子所述,请务必从您的项目根目录 运行 composer require doctrine/dbal

这些设置为:

php artisan make:migration alter_table_[yourtablenamehere]_change_[somecolumnname] --table=[yourtablenamehere]

从您的项目根目录。

来自文档:

https://laravel.com/docs/master/migrations#modifying-columns

class AlterTableSomething extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('table', function (Blueprint $table) {
            $table->text('column_name')->change();
        });
    }
}

如果使用 change()

出现以下错误

Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL80Platform may not support it.

这意味着您的 table 中存在一些具有枚举类型的列(不一定更改)。因此,您可以使用以下函数代替 change()

public function changeColumnType($table, $column, $newColumnType) {                
    DB::statement("ALTER TABLE $table CHANGE $column $column $newColumnType");
} 

然后像这样使用它:$this->changeColumnType('sometable','text','TEXT');

以下对我有用。

您肯定需要安装 doctrine/dbal 才能完成这项工作,在终端中使用以下命令。

composer require doctrine/dbal

然后按照此处所述创建迁移- https://laravel.com/docs/master/migrations#generating-migrations

打开您的迁移文件并在下面写下。

Schema::table('yourTable', function (Blueprint $table) {
    $table->string('column_name','4294967295')->change();
});

由于 longText 的最大字符数限制为 4,294,967,295,Laravel 会自动将 column_name 更改为 longText 数据类型。