首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 8迁移-更改枚举值

Laravel 8迁移-更改枚举值
EN

Stack Overflow用户
提问于 2020-10-26 09:57:50
回答 1查看 5.9K关注 0票数 3

我试图用Laravel迁移来更改数据库中的枚举值。

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

代码语言:javascript
复制
Schema::table('questionnaires', function ($table) {
    $table->enum('type', ['image', 'sound', 'video'])->nullable()->default('image')->change();
});

但我得到了以下错误:

未知数据库类型枚举请求,Doctrine\DBAL\Platform\MySQL57Platform可能不支持它

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

代码语言:javascript
复制
DB::statement("ALTER TABLE questionnaires MODIFY COLUMN type ENUM('image', 'sound', 'video') DEFAULT 'image'");

但对我来说并不理想..。

是否有更多的解决方案在“协议”与Laravel 8,而不经过纯SQL?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-26 10:10:21

解释

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

如前所述,这里 ENUM不能被反向工程成某种类型。每个ENUM都是它自己的值。因此,您必须明确地告诉Laravel哪种类型的ENUM是。

这似乎是拉拉维尔所有版本的一个问题。

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

代码语言:javascript
复制
DB::statement("ALTER TABLE questionnaires MODIFY COLUMN type ENUM('image', 'sound', 'video') DEFAULT 'image'");

迁移文件修复

此选项是上面注释的GitHub链路,它建议您将这一行代码放在迁移文件的up()方法内的实际迁移之前。

代码语言:javascript
复制
DB::connection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');

模型/枚举类型修复

我觉得这个比上面提到的要简单得多,但是作为一个有效的选择仍然存在,所以我在这里说,

你可以阅读一个官方的理论-项目网页这里,它告诉你如何从模型/枚举类型。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64534892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档