Hvordan komme Doctrine2 enhet identifikator uten å vite navnet sitt

stemmer
7

Jeg forsøker å skape en abstrahert getId metode på min base Entity klasse i Symfony2 bruke Doctrine2 for en database hvor primærnøkler er oppkalt inconsistently over bord.

Ved inspeksjon foretakets stedene jeg ser det er en privat '_identifier' eiendom som inneholder informasjonen jeg prøver å hente, men jeg er ikke sikker på hvordan du skal få tilgang til det.

Jeg antar det er noen enkle Lære magi lik:

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

Men jeg har ikke klart å finne den på intertubes hvor som helst.

Publisert på 25/05/2011 klokken 18:14
kilden bruker
På andre språk...                            


1 svar

stemmer
18

Du får tilgang til denne informasjonen via EntityManager#getClassMetadata(). Et eksempel kan se slik ut:

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

Hvis foretaket har en sammensatt primærnøkkel, må du bruke $meta->getIdentifierFieldNames()i stedet. Selvfølgelig, ved hjelp av denne metoden, vil du ha tilgang til en forekomst av EntityManager, så denne koden er vanligvis plassert i en tilpasset depot i stedet for i selve enheten.

Håper det hjelper.

Svarte 26/05/2011 kl. 20:56
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more