2011-11-29 7 views
8

Czy jest jakaś różnica między tymi dwoma stwierdzeniami:getEntityManager() i getDoctrine() w Symfony2

$this->getDoctrine()->getEntityManager()->getRepository(); 

$this->getDoctrine()->getRepository(); 

Czy różnica odnosi się do każdej koncepcji OOP mi brakuje?

+1

$ this-> getDoctrine() -> getEntityManager() jest przestarzałe w Symfony 2 – bitek

Odpowiedz

8

Generalnie, nie ma różnicy, ponieważ

$this->getDoctrine()->getRepository(); 

jest tylko pomocnikiem dla

$this->getDoctrine()->getEntityManager()->getRepository(); 

Można mieć kilka menedżerów jednostki, a wtedy nie będzie niewielka różnica w coraz repozytorium z jeden:

$this->getDoctrine()->getRepository($entityName, $enityManagerName); 
$this->getDoctrine()->getEntityManager($entityManagerName)->getRepository($entityName); 

Ale znowu, nie ma różnicy w wyniku, który otrzymasz.

Wszystkie inne rzeczy są równe, wybrałbym najkrótszy.

1

Wynik jest taki sam, ale jeśli potrzebujesz EntityManager dla więcej niż tylko coraz repozytorium, to może być przydatny do przechowywania go, a następnie otrzymywać repozytorium, a także wykonywać inne operacje, takie jak spłukiwania:

$_em = $this->getDoctrine()->getEntityManager(); 
$repository = $_em->getRepository(); 
//... 
$_em->flush(); 

Tak jak powiedziano wcześniej, jeśli potrzebujesz tylko repozytorium, przejdź do drugiej instrukcji, która jest krótsza i tak łatwa do odczytania jak pierwsza.

1

Nie ma różnicy. Jeśli spojrzysz na kod źródłowy programu AbstractManagerRegistry.php. Możesz zobaczyć ten kod:

public function getRepository($persistentObjectName, $persistentManagerName = null) 
{ 
    return $this->getManager($persistentManagerName)->getRepository($persistentObjectName); 
} 

Jak widać, gdy dzwonisz getRepository(), to najpierw wywołuje getManager(), a następnie getRepository(). Sugerowałbym użycie drugiego, ponieważ zapewnia on intellisense w IDE, takich jak PHPStorm. Mam nadzieję, że to pomoże.