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

时间:2011-05-25 18:14:15

标签: entity doctrine-orm identifier symfony

我正在尝试使用Doctrine2在Symfony2中的基本Entity类上为一个数据库创建一个抽象的getId方法,在该数据库中,主键在表之间的命名不一致。

检查实体对象时,我看到有一个私有的'_identifier'属性,其中包含我要检索的信息,但我不确定如何正确访问它。

我假设有一些简单的Doctrine魔法类似于:

public function getId()
{
    return $this->getIdentifier();
}

但我没有设法在任何地方的intertubes上找到它。

1 个答案:

答案 0 :(得分:22)

您可以通过EntityManager#getClassMetadata()访问此信息。一个例子如下:

// $em instanceof EntityManager
$meta = $em->getClassMetadata(get_class($entity));
$identifier = $meta->getSingleIdentifierFieldName();

如果您的实体具有复合主键,则需要使用$meta->getIdentifierFieldNames()。当然,使用此方法,您需要访问EntityManager的实例,因此此代码通常放在custom repository而不是实体本身。

希望有所帮助。