2016-12-12 5 views
1

\Doctrine\DBal\Types\Type::addType()に追加したenumFooTypeという列挙型の列型がありました。列を削除するときにdoctrineの移行を使用する

列を言っ削除になり、マイグレーションを発生させるためにvendor/bin/doctrine-module migrations:diffを実行している場合、エラーがスローされました:私は、データベースが(DC2Type:enumFooType)が付いfoo_typeを持っているので、エラーがスローされた

[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. 

推測しています。

これらのタイプの削除を処理する正しい方法は何ですか?私の最初の考えは、vendor/bin/doctrine-module migrations:generateを使って空白のマイグレーションを生成し、手作業でクエリーを書くことです。しかし、できる限り手動で書くのではなく、もっと自動化したいと思います。

答えて

0

TL; DR:DBALタイプenumFooTypeため

クラス定義は(今私は、この行を書かれていること、それはのように、種類の明白な感じ「当たり前!」)教義のコマンドを実行する前に存在している必要があります。

長い答え:

ロールバックし、試行錯誤のカップルの後、私は操作のこの種のために、次の手順を考案:

  1. エンティティクラスからenumFooTypeのプロパティを削除します。
  2. 移行を作成します(これまではEnumFooTypeファイルが存在します)。
  3. このdbalタイプの定義を含むEnumFooTypeクラスを削除します。

あなたが最初のタイプを削除する場合は、このファイルが欠落しているので、教義は、元の質問に投稿された例外で、その結果、負荷ではありませんので、それはこのに行われなければならない理由があります。

また、移行を作成した後でを入力した後、を削除しました。あなたがその変更をロールバックする必要がある場合は、する必要があります:EnumFooTypeが存在し、タイプenumFooTypeのプロパティはエンティティクラスで定義されているように

  1. は、コミット前のに戻します。
  2. ロールバックするために移行コマンドを実行します。
関連する問題