@ORM \ Id没有在symfony中为一个实体标识一个实体

问题描述:

我拥有一个由许多特征组成的类城市。@ORM Id没有在symfony中为一个实体标识一个实体

/** 
* @ORM\Entity 
* @ORM\Table(name="City") 
* @SoftDeleteable(fieldName="deletedAt") 
*/ 
class City 
{ 
    use IdentifiableEntity; 
    use TimestampableEntity;  
} 

我有一个特质IdentifiableEntity

trait IdentifiableEntity 
{ 
    /** 
    * @var integer 
    * @ORM\Column(name="id", type="integer", options={"unsigned":true}) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 
    //setter getter 
} 

当我执行斌/控制台学说出现问题:迁移:DIFF我收到此错误信息

[Doctrine\ORM\Mapping\MappingException]                       
    No identifier/primary key specified for Entity "AppBundle\Entity\City\City". Every Entity must have an identifier/primary key. 

这是为什么?我已经在我的特质中明确表示$id应该像@ORM\Id一样对待。添加@ORM\GeneratedValue(strategy="IDENTITY")也没有帮助。怎么了?

P.S.我使用的是symfony 3.2和doctrine/doctrine-migrations-bundle:1.0

+0

任何机会你有另一个实体,指向这个'城市'实体,指向错误的命名空间的协会? (AppBundle \ Entity \ City \ City)

+0

@SamJanssens,但它是指向此实体的正确命名空间。 – user7808407

+0

似乎不可能在特质中创建主键。奇怪我很难找到任何有关它的信息 – user7808407

只有当您的城市城市有其他$ id属性而没有注释时才有可能。所以它从特质中覆盖了$ id。否则,请确保这是确切的City类,而不是另一个名称空间中的其他某些其他类。

+0

我不太确定我了解第二部分,所以我再问一次:你说我必须每次都从一个特性重写一个$ id以使其工作? – user7808407

+0

他的意思是你的城市实体必须有一个$ id属性,而这个$ id属性将被你的特质所覆盖。如果你的特质的唯一目的是在你的实体上有一个$ id属性作为主键,那么你应该避免使用它 – OlivierC

+0

我的意思是,如果你要从特质中得到一个id,请确保你没有一个id城市类。因为来自City类的id将优先于教条而不是来自trait。 –