在Postgres中,更改表中具有枚举类型的列。
在Postgres中,更改表中具有枚举类型的列。
这是我的代码:
public function up() { Schema::table('organization_user', function (Blueprint $table) { $table->renameColumn('company_id', 'organization_id'); }); }
我想在表中重命名列。而在这个表中有一个枚举类型的列。但是出现了错误:请求了未知的数据库类型company_roles,Doctrine\DBAL\Platforms\PostgreSQL100Platform可能不支持它。我使用的是laravel 5.6。
这个问题的出现是因为在PostgreSQL中,无法直接更改表中拥有枚举类型的列名。这个问题可能与Laravel文档中提到的内容有关:“无法重命名拥有'enum'类型的列的表”。具体见:
这个问题似乎是Doctrine/DBal的一个5年前的问题,而Laravel使用了它。具体见:[Bug] Schema builder - renameColumn fails on table with enum columns。但是在同一个问题报告中也提供了一种解决方法:DB Query。为了方便参考,我在这里列出具体方法:
DB::statement("ALTER TABLE table_name MODIFY COLUMN column_name ENUM('Here','is','choices')");
在这种情况下,您需要在迁移类文件的down()
函数中提供正确的语句来恢复表的状态。