Как получить идентификатор сущности Doctrine2, не зная его имени - PullRequest
9 голосов
/ 25 мая 2011

Я пытаюсь создать абстрагированный метод getId в моем базовом классе Entity в Symfony2, используя Doctrine2 для базы данных, в которой первичные ключи имеют разные имена в разных таблицах.Свойство _identifier, которое содержит информацию, которую я пытаюсь получить, но я не уверен, как правильно получить к ней доступ.

Я предполагаю, что есть некоторая простая магия Доктрины, похожая на:

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

Но мне нигде не удалось найти его в промежутках.

1 Ответ

22 голосов
/ 27 мая 2011

Вы можете получить доступ к этой информации через EntityManager#getClassMetadata().Пример может выглядеть следующим образом:

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

Если у вашей сущности есть составной первичный ключ, вам нужно будет использовать $meta->getIdentifierFieldNames().Конечно, при использовании этого метода вам потребуется доступ к экземпляру EntityManager, поэтому этот код обычно помещается в пользовательский репозиторий , а не в сам объект.

Надеюсьэто помогает.

...