3

我将 FOSUserBundle 与一个必须与现有模式一起使用的新 Symfony 项目一起使用。我的用户实体按照说明扩展了 FOS\UserBundle\Entity\User,但电子邮件列被命名为“email_addr”而不是“email”。由于父级定义了 $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

看起来学说 2.3 添加了这些功能。不幸的是,SO 决定我必须复制他们网站上已经存在的信息,以避免“琐碎的答案”。

新 Doctrine 2.3 中的 @AssociationOverride 和 @AttributeOverride

于 2014-10-12T04:34:12.020 回答