Doctrine2を使った開発のワークフローで悩み中

symfony 1では、ORM Designerを使ってスキーマ設計→schema.yml書き出し→モデルやDBを生成(必要に応じてマイグレーション)というワークフローでした。

こういったワークフローをDoctrine2を使った開発でもやりたいと思い、Doctrine2のコマンド等とあれこれ格闘していますが、今のところまだ「これだ」と思える方法が見つかっていません。


現状、ぶつかった問題点

  • ORM DesignerはDoctrine2をサポートしているが完全ではなく、リレーションの情報など、一部書き出されたYAMLが不完全
  • YAMLマッピング設定を書き、doctrine:generate:entitiesでエンティティを生成すると、getter/setterなども一挙に生成できて楽、しかし問題も
    • YAMLにフィールドを追加した場合の追加分の書き出しがうまくいかなかった(2重になったりした)
    • 書き出されたメソッドの名前を変えたりすると、(当然ですが)再度YAMLからの追加書き出しなどに対応できない
      • エンティティ側の情報をリフレクションで取得して処理しているので、こういうのは仕方ない
    • 名前空間固定
    • 生成したエンティティのメンバー変数はprivate
      • これは、(おそらく)エンティティ用のクラスの場合、マッピングするメンバー変数はprivate推奨っぽいです。(要調査)
  • エンティティにアノテーションマッピングを記述するのが現状もっともスムーズに思える
    • getter/setterはIDEなどの力を借りて生成するのが吉
    • アノテーションの補完がIDEでできない
    • 名前空間固定っぽい
    • ORM Designerから直接書き出したいができない
  • マッピング情報はYAML、エンティティにはマッピング情報を記述しないというやり方
    • 2重管理的になるので避けたい(エンティティ側にもメンバー変数などの宣言が必要なため)
  • リレーション(Doctrine2ではアソシエーションと呼んでいる)関連
    • アノテーションの記述方法に慣れるまでややこしい
    • cascading persistに関連する部分は、カスタム実装が必要な場合も


現時点での結論としては、

というやり方がもっとも無難っぽいです。(あくまで個人的な結論)