Laravel 8迁移-更改枚举值



我正试图通过Laravel迁移更改数据库中的枚举值。

首先,我尝试了这个经典的改变:

Schema::table('questionnaires', function ($table) {
    $table->enum('type', ['image', 'sound', 'video'])->nullable()->default('image')->change();
});

但我得到了以下错误:

请求未知的数据库类型枚举,条令\DBAL\Platforms\MySQL57Platform可能不支持

我通过直接执行SQL解决了我的问题:

DB::statement("ALTER TABLE questionnaires MODIFY COLUMN type ENUM('image', 'sound', 'video') DEFAULT 'image'");

但对我来说,这似乎不是最好的…

在";协议";对于Laravel 8,而不经过纯SQL?

感谢

说明

就这个问题再详细阐述一下。

正如这里所指出的,ENUM不能被反向工程为某一类型。每个ENUM都是自己的一个值。因此,您必须特别告诉Laravel ENUM是哪种类型。

这似乎是Laravel所有版本的问题

在每个版本的文档中,即。https://laravel.com/docs/8.x/migrations#renaming-列,您可以发现不支持更改枚举字段。如前所述,迁移中的DB语句是目前最好的解决方法。

DB::statement("ALTER TABLE questionnaires MODIFY COLUMN type ENUM('image', 'sound', 'video') DEFAULT 'image'");

迁移文件修复

这个选项是上面评论的GitHub链接,建议您在实际迁移之前将这行代码放在迁移文件的up()方法中。

DB::connection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');

模型/枚举类型修复

我认为这个比上面提到的要简单得多,但仍然是一个有效的选择,所以我将把它放在这里,

你可以在这里阅读一个官方的条令项目网站页面,它向你展示了如何从模型/枚举类型中实现这一点。

最新更新