我正在尝试使用Doctrine2在Symfony2中的基本Entity类上为一个数据库创建一个抽象的getId方法,在该数据库中,主键在表之间的命名不一致。
检查实体对象时,我看到有一个私有的'_identifier'属性,其中包含我要检索的信息,但我不确定如何正确访问它。
我假设有一些简单的Doctrine魔法类似于:
public function getId()
{
return $this->getIdentifier();
}
但我没有设法在任何地方的intertubes上找到它。
答案 0 :(得分:22)
您可以通过EntityManager#getClassMetadata()
访问此信息。一个例子如下:
// $em instanceof EntityManager
$meta = $em->getClassMetadata(get_class($entity));
$identifier = $meta->getSingleIdentifierFieldName();
如果您的实体具有复合主键,则需要使用$meta->getIdentifierFieldNames()
。当然,使用此方法,您需要访问EntityManager
的实例,因此此代码通常放在custom repository而不是实体本身。
希望有所帮助。