2016-12-12 3 views
1

У нас был тип столбца для перечисления, называемого enumFooType, который мы добавили на \Doctrine\DBal\Types\Type::addType().Использование миграции доктрины при удалении столбца

При запуске vendor/bin/doctrine-module migrations:diff для создания миграции, которая будет удалять указанную колонку, была брошена ошибка:

[Doctrine\DBAL\DBALException] 
    Unknown column type "enumFooType" requested. Any Doctrine type that you use has to be registered with \Doctrine\DBAL\Types\Type::addType(). 
    You can get a list of all the known types with \Doctrine\DBAL\Types\Type::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. 

Я предполагаю, что ошибка была брошена, потому что база данных имеет foo_type помеченный (DC2Type:enumFooType).

Каков правильный способ обращения с этими типами делеций? Моя первая мысль заключалась в том, чтобы создать пустую миграцию с использованием vendor/bin/doctrine-module migrations:generate и вручную написать запрос, но я бы хотел более автоматизированный способ, если возможно, не писать ничего вручную.

ответ

0

TL; DR:

Определение класса для типа DBAL enumFooType должны существовать перед выполнением команды доктрины (теперь, когда я написал эту линию, он чувствует себя вроде очевидно, как «Дух!») ,

Длинный ответ:

После нескольких откатов и проб и ошибок, я разработал следующую процедуру для такого рода операций:

  1. Удалить свойство enumFooType из класса сущностей.
  2. Создайте миграцию (до этого момента файл EnumFooType все еще существует).
  3. Удалить класс EnumFooType, содержащий определение этого типа dbal.

Причина это должно быть сделано в этом порядке потому, что если вы удалите тип первой, доктрина не будет нагрузки, поскольку этот файл отсутствует, в результате чего, за исключением размещенных в оригинале вопрос.

Кроме того, после того, как вы создали миграцию, и затем удалил тип; Если вы когда-нибудь понадобится, чтобы откатить это изменение, вы должны:

  1. Восстановление предыдущей фиксации, так что EnumFooType существует и свойство типа enumFooType определяется в классе сущностей.
  2. Запустите команду миграции для отката.
Смежные вопросы