我将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中的列名?

最佳答案

我找到了答案:

More about Doctrine implementations


如果您需要更改映射(例如,使字段名称适应于旧数据库),唯一的解决方案是重新编写整个映射,而不必从映射的超类继承映射。在这种情况下,您的实体应直接从FOS \ UserBundle \ Model \ User(以及该组的FOS \ UserBundle \ Model \ Group)扩展。

09-25 19:19