当要删除列时,请使用学说迁移



我们有一个名为 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!")。

长答案:

经过几次回滚,反复试验和错误,我为这种操作设计了以下过程:

  1. 从实体类中删除enumFooType的属性。
  2. 创建迁移(到目前为止,EnumFooType文件仍然存在)。
  3. 删除包含此DBAL类型的定义的EnumFooType类。

必须在此 order 中必须完成的原因是因为如果首先删除类型,则不会加载学说,因为此文件丢失,导致原始问题中发布的例外。

此外,

创建迁移后,然后删除了类型;如果您需要回滚,则必须:

  1. 还原到以前的提交,以使EnumFooType存在,并且类型enumFooType的属性在实体类中定义。
  2. 运行迁移命令以向后回滚。

相关内容

  • 没有找到相关文章

最新更新