我有一个由许多特征组成的类城市。
/**
* @ORM\Entity
* @ORM\Table(name="City")
* @SoftDeleteable(fieldName="deletedAt")
*/
class City
{
use IdentifiableEntity;
use TimestampableEntity;
}
我有一个特征 IdentifyingEntity
trait IdentifiableEntity
{
/**
* @var integer
* @ORM\Column(name="id", type="integer", options={"unsigned":true})
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
//setter getter
}
当我执行 bin/console 学说:迁移: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")
也没有帮助。怎么了?
附注我正在使用 symfony 3.2 和doctrine/doctrine-migrations-bundle: 1.0
仅当您的 City 类具有其他没有注释的 $id 属性时,这才有可能。所以它会覆盖特征中的 $id 。 否则,请确保这是确切的 City 类,而不是其他命名空间中的其他类。
如果还有人关心的话。
不,特征中不可能有字段,其中这些字段具有配置或映射字段 https://www.doctrine-project.org/projects/doctrine-orm/en/3.1/reference/limitations-and-known-issues.html#using-traits-in-entity-classes