Laravel 8迁移-更改枚举值
我正在尝试使用Laravel迁移更改数据库中的枚举值 首先,我尝试了这个经典的变化:Laravel 8迁移-更改枚举值,laravel,enums,database-migration,laravel-8,Laravel,Enums,Database Migration,Laravel 8,我正在尝试使用Laravel迁移更改数据库中的枚举值 首先,我尝试了这个经典的变化: Schema::table('questionnaires', function ($table) { $table->enum('type', ['image', 'sound', 'video'])->nullable()->default('image')->change(); }); 但我得到了以下错误: 请求了未知的数据库类型枚举, 条令\DBAL\Platforms
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
谢谢你的解释
就这个问题再详细阐述一下
如上所述,枚举不能反向工程为特定类型。每个枚举都是它自己的值。因此,您必须明确告诉Laravel枚举的类型
这似乎是所有版本的Laravel都存在的问题
在每个版本的文档中,例如,您可以发现不支持更改枚举字段。如前所述,迁移中的DB语句是目前最好的解决方法
DB::语句(“ALTER TABLE问卷修改列类型ENUM('image'、'sound'、'video')默认值'image'”);
迁移文件修复
此选项是上面注释的选项,建议您将这行代码放在迁移文件的up()
方法中的实际迁移之前
DB::connection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum','string');
模型/枚举类型修复
我觉得这个比上面提到的要简单得多,但仍然是一个有效的选项,所以我将把它放在这里
您可以阅读一个官方的条令项目网站页面,该页面向您展示了如何从模型/枚举类型中实现这一点。请查看感谢您的返回。但是,有了这个错误:请求了未知的列类型“enum”。您使用的任何条令类型都必须注册到\doctor\DBAL\Types\type::addType()。您可以使用\doctor\DBAL\types\Type::getTypesMap()获得所有已知类型的列表,您使用的是哪个Laravel版本?我正在尝试Laravel 8.9。我还尝试了Laravel6.6,结果也一样,通过LaravelDocs,似乎每个版本都有这个问题。使用DB语句是目前最好的解决方法,我已经更新了我的答案来指出这一点。