问题描述
|
我试图在我的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
的实例,因此此代码通常放置在自定义存储库中,而不是实体本身。
希望能有所帮助。