我们有一个名为 enumFooType
的枚举列类型,我们在 DoctrineDBalTypesType::addType()
上添加了。
运行vendor/bin/doctrine-module migrations:diff
以生成删除所述列的迁移时,丢弃了错误:
[DoctrineDBALDBALException]
Unknown column type "enumFooType" requested. Any Doctrine type that you use has to be registered with DoctrineDBALTypesType::addType().
You can get a list of all the known types with DoctrineDBALTypesType::getTypesMap().
If this error occurs during database introspection then you might have forgot to register all database types for a Doctrine Type.
Use AbstractPlatform#registerDoctrineTypeMapping() or have your custom types implement Type#getMappedDatabaseTypes().
If the type name is empty you might have a problem with the cache or forgot some mapping information.
我猜该错误是因为数据库标记了(DC2Type:enumFooType)
。
foo_type
处理这些类型的删除的正确方法是什么?我的第一个想法是使用vendor/bin/doctrine-module migrations:generate
生成空白的迁移并手动编写查询,但是我想以一种更自动化的方式,如果可能的话,请不要手动编写任何内容。
tl; dr:
在运行学说命令之前,DBAL类型enumFooType
的类定义应该存在(现在我已经写了这条线,感觉很明显,例如" du!")。
长答案:
经过几次回滚,反复试验和错误,我为这种操作设计了以下过程:
- 从实体类中删除
enumFooType
的属性。 - 创建迁移(到目前为止,
EnumFooType
文件仍然存在)。 - 删除包含此DBAL类型的定义的
EnumFooType
类。
必须在此 order 中必须完成的原因是因为如果首先删除类型,则不会加载学说,因为此文件丢失,导致原始问题中发布的例外。
此外,创建迁移后,然后删除了类型;如果您需要回滚,则必须:
- 还原到以前的提交,以使
EnumFooType
存在,并且类型enumFooType
的属性在实体类中定义。 - 运行迁移命令以向后回滚。