単数形に変換されないようにする
symfony1.1を使い始めると同時にDoctrineに乗り換えました。
Propelに比べたらかなり直感的ですし、明らかに学習コストも低いですね。
もちろん、Propelだけにしか対応していないようなプラグインも多々あるので、その辺りと天秤にかけて決定すると良いよ。
で、お題の件。
自分の場合は、スキーマファイルはDBを作成した後に、タスクコマンドで生成するようにしています。
一番の理由はyamlやXMLの記述間違いで時間をつぶしたくないのと、phpMyAdminなどでテーブルを作成したほうが早いですし。
さらには、スキーマファイルからテーブル作成すると勝手にdropされることもあるし。。
で、いつものように物理的なテーブルを作成してから以下のコマンドで作成しました。
$ ./symfony doctrine:build-schema backend
そうすると作成されたschema.ymlを見てみるとテーブル名がGoodsのモデル名がGoodに。。
Doctrineのマニュアルにはちゃんと書いてありますね。。
デフォルトではDoctrineは既存のデータベースから読み込まれた各モデルの名前を単数型にしようとします。
このルールのために、コマンドで既存DBからスキーマを作成させると単数形のモデル名でschema.ymlが作成されてしまいます。
propelしか触った事がなければ「なぬ!」となりますが、
DoctrineはActive Recordの影響を受けてますのでCakePHPをつかったことがあれば「あー。あれね」ぐらいなものでしょうか。
これをキッカケにこの規則に合わせようかとも思いましたが、Goodに違和感を感じてしまいます。(設計の段階でItemsとかにすれば良いのにというオチなんですけどね。。。)
というわけで、この設定を無効にするためDoctrine_Managerのattributeの singularize_importを falseにしなさいとマニュアルには書いてあります。
symfonyではDoctrineはプラグインでインストールしていますので、プラグインの設定をすればよさげです。
そこで、<プロジェクトルート>/config/doctrine.ymlというファイルを作成して
all: attributes: singularize_import: false
としてやるだけで設定を無効にできました。