3

既存のスキーマで動作する必要がある新しい Symfony プロジェクトで FOSUserBundle を使用しています。私のユーザー エンティティは、説明にあるように FOS\UserBundle\Entity\User を拡張しますが、メール列の名前は「email」ではなく「email_addr」です。親が $email を定義しているため、注釈を添付するために再宣言することはできません。

 /**
  * @var string $emailAddr
  *
  * @ORM\Column(name="email_addr", type="text", nullable=false)
  */
 protected $email;

私が得る例外は次のとおりです。

[Doctrine\ORM\Mapping\MappingException]                                                                                
Property "email" in "Foo\DataBundle\Entity\User" was already declared, but it must be declared only once  

私の質問は次のいずれかです。

  • Doctrine2 サブクラスはどのように注釈を使用して、親で定義されたものを変更できますか?
  • または、FOSUserBundle の列名をオーバーライドするにはどうすればよいですか?
4

2 に答える 2

4

私は答えを見つけました:

Doctrine の実装についての詳細

マッピングを変更する必要がある場合 (たとえば、フィールド名をレガシー データベースに適合させるため)、唯一の解決策は、マッピングされたスーパークラスからマッピングを継承せずに、マッピング全体を再度記述することです。このような場合、エンティティは FOS\UserBundle\Model\User (およびグループの FOS\UserBundle\Model\Group) から直接拡張する必要があります。

于 2012-08-27T18:08:05.523 に答える
2

doctrine 2.3 でこれらの機能が追加されたようです。残念ながら、SO は、「些細な答え」を避けるために、サイトに既に存在する情報を複製する必要があると判断しました。

新しい Doctrine 2.3 の @AssociationOverride と @AttributeOverride

于 2014-10-12T04:34:12.020 に答える