リレーションが正しくモデルに定義されない??

昨日Doctrine1.0.7のバグにはまり最新版にしたわけですが、今日作業しているとコマンドでモデルをビルドした際に、モデルのリレーションに正しくエイリアスが設定されていないという苦情が。

ソースをみたところ1.0.7から1.0.8になる際、Doctrine_Import_Schema::_autoCompleteOppositeRelations()というリレーション情報を色々補完してくれるメソッドに1行だけ簡単な処理が追加されており、他の部分では特にそれっぽそうなものは見当たらず。

実際に値を出しつつデバッグしていくと明らかに不要そうなリレーション情報を発見。よく見るとschema.ymlに不要なリレーションが定義されていました。基本的にschema.ymlでリレーションの定義を行うときは片側のモデルにのみrelationsの設定をすればいいのですが、なぜか両方に指定されている状態でした。

symfonyで開発しているのですが、symfonyにはdoctrine:build-schemaという、DBスキーマからschema.ymlを自動生成するというコマンドを使用してschema.ymlを生成していたためにこんなことになっていたみたいでした。

実際にはbuild-schemaを拡張して色々やっていたのでそこで不要なリレーションを削除するということを行ったら無事にエイリアスが設定されました。

というわけで、schema.ymlを自動生成したりする時はお気をつけください。