Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 8迁移-更改枚举值_Laravel_Enums_Database Migration_Laravel 8 - Fatal编程技术网

Laravel 8迁移-更改枚举值

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

我正在尝试使用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

谢谢你的解释 就这个问题再详细阐述一下

如上所述,枚举不能反向工程为特定类型。每个枚举都是它自己的值。因此,您必须明确告诉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语句是目前最好的解决方法,我已经更新了我的答案来指出这一点。