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

Lor*_*ine 10 entity identifier symfony doctrine-orm

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

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

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

public function getId()
{
    return $this->getIdentifier();
}
Run Code Online (Sandbox Code Playgroud)

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

Pro*_*tic 23

您可以通过访问此信息EntityManager#getClassMetadata().一个例子看起来像这样:

// $em instanceof EntityManager
$meta = $em->getClassMetadata(get_class($entity));
$identifier = $meta->getSingleIdentifierFieldName();
Run Code Online (Sandbox Code Playgroud)

如果您的实体具有复合主键,则需要使用$meta->getIdentifierFieldNames().当然,使用此方法,您将需要访问实例EntityManager,因此此代码通常放在自定义存储库中,而不是放在实体本身中.

希望有所帮助.