Laravel 8 迁移 - 更改枚举值
Laravel 8 Migration - change enum values
我正在尝试使用 Laravel 迁移更改数据库中的枚举值。
首先,我尝试了这个经典的改变:
Schema::table('questionnaires', function ($table) {
$table->enum('type', ['image', 'sound', 'video'])->nullable()->default('image')->change();
});
但我收到以下错误:
Unknown database type enum requested,
Doctrine\DBAL\Platforms\MySQL57Platform may not support it
我通过直接执行 SQL 解决了我的问题:
DB::statement("ALTER TABLE questionnaires MODIFY COLUMN type ENUM('image', 'sound', 'video') DEFAULT 'image'");
但这对我来说似乎不是最佳选择...
在与Laravel 8的“约定”中是否有更多的解决方案,
没有经过纯 SQL?
谢谢
说明
详细说明这个主题。
如前所述here 无法将 ENUM 逆向工程为特定类型。每个 ENUM 都是它自己的一个值。因此,您必须明确告诉 Laravel ENUM 是哪种类型。
这似乎是所有版本 Laravel
的问题
在每个版本的文档中,即 https://laravel.com/docs/8.x/migrations#renaming-columns, you can find that changing enum fields is not supported. As noted here 迁移中的 DB 语句是目前最好的解决方法。
DB::statement("ALTER TABLE questionnaires MODIFY COLUMN type ENUM('image', 'sound', 'video') DEFAULT 'image'");
迁移文件修复
这个选项就是上面注释的GitHub link,建议你把这行代码放在真正迁移之前的up()
迁移文件的方法里面。
DB::connection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
Models/enum 类型修复
我认为这个比上面提到的要简单得多,但仍然是一个有效的选项,所以我会把它放在这里,
您可以阅读官方 doctrine-project 网站页面 here,其中向您展示了如何从模型/枚举类型中进行此操作。
我正在尝试使用 Laravel 迁移更改数据库中的枚举值。
首先,我尝试了这个经典的改变:
Schema::table('questionnaires', function ($table) {
$table->enum('type', ['image', 'sound', 'video'])->nullable()->default('image')->change();
});
但我收到以下错误:
Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it
我通过直接执行 SQL 解决了我的问题:
DB::statement("ALTER TABLE questionnaires MODIFY COLUMN type ENUM('image', 'sound', 'video') DEFAULT 'image'");
但这对我来说似乎不是最佳选择...
在与Laravel 8的“约定”中是否有更多的解决方案, 没有经过纯 SQL?
谢谢
说明
详细说明这个主题。
如前所述here 无法将 ENUM 逆向工程为特定类型。每个 ENUM 都是它自己的一个值。因此,您必须明确告诉 Laravel ENUM 是哪种类型。
这似乎是所有版本 Laravel
的问题在每个版本的文档中,即 https://laravel.com/docs/8.x/migrations#renaming-columns, you can find that changing enum fields is not supported. As noted here 迁移中的 DB 语句是目前最好的解决方法。
DB::statement("ALTER TABLE questionnaires MODIFY COLUMN type ENUM('image', 'sound', 'video') DEFAULT 'image'");
迁移文件修复
这个选项就是上面注释的GitHub link,建议你把这行代码放在真正迁移之前的up()
迁移文件的方法里面。
DB::connection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
Models/enum 类型修复
我认为这个比上面提到的要简单得多,但仍然是一个有效的选项,所以我会把它放在这里,
您可以阅读官方 doctrine-project 网站页面 here,其中向您展示了如何从模型/枚举类型中进行此操作。