如何在不知道名称的情况下获取Doctrine2实体标识符

问题描述

| 我试图在我的Symfony2的基础Entity类上使用Doctrine2为数据库创建抽象的getId方法,该数据库的主键在表之间的名称不一致。 检查实体对象时,我看到有一个私有的'_identifier \'属性,其中包含我要检索的信息,但不确定如何正确访问它。 我假设有一些简单的教义魔术类似于:
public function getId()
{
    return $this->getIdentifier();
}
但是我还没有在任何地方的管上找到它。     

解决方法

您可以通过
EntityManager#getClassMetadata()
访问此信息。一个示例如下所示:
// $em instanceof EntityManager
$meta = $em->getClassMetadata(get_class($entity));
$identifier = $meta->getSingleIdentifierFieldName();
如果您的实体具有复合主键,则需要改用
$meta->getIdentifierFieldNames()
。当然,使用此方法,您将需要访问
EntityManager
的实例,因此此代码通常放置在自定义存储库中,而不是实体本身。 希望能有所帮助。