我试图用Laravel迁移来更改数据库中的枚举值。
首先,我尝试了这个经典的改变:
Schema::table('questionnaires', function ($table) {
$table->enum('type', ['image', 'sound', 'video'])->nullable()->default('image')->change();
});但我得到了以下错误:
未知数据库类型枚举请求,Doctrine\DBAL\Platform\MySQL57Platform可能不支持它
我通过直接执行SQL解决了我的问题:
DB::statement("ALTER TABLE questionnaires MODIFY COLUMN type ENUM('image', 'sound', 'video') DEFAULT 'image'");但对我来说并不理想..。
是否有更多的解决方案在“协议”与Laravel 8,而不经过纯SQL?
谢谢
发布于 2020-10-26 10:10:21
解释
在这个问题上再详细阐述一下。
如前所述,这里 ENUM不能被反向工程成某种类型。每个ENUM都是它自己的值。因此,您必须明确地告诉Laravel哪种类型的ENUM是。
这似乎是拉拉维尔所有版本的一个问题。
在每个版本(即https://laravel.com/docs/8.x/migrations#renaming-columns )的文档中,您可以发现不支持更改枚举字段。正如注意到的,这里迁移中的DB语句是目前最好的解决方法。
DB::statement("ALTER TABLE questionnaires MODIFY COLUMN type ENUM('image', 'sound', 'video') DEFAULT 'image'");迁移文件修复
此选项是上面注释的GitHub链路,它建议您将这一行代码放在迁移文件的up()方法内的实际迁移之前。
DB::connection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');模型/枚举类型修复
我觉得这个比上面提到的要简单得多,但是作为一个有效的选择仍然存在,所以我在这里说,
你可以阅读一个官方的理论-项目网页这里,它告诉你如何从模型/枚举类型。
https://stackoverflow.com/questions/64534892
复制相似问题