2011-11-29 24 views
8

¿Hay alguna diferencia entre estas dos afirmaciones:getEntityManager() y getDoctrine() en Symfony2

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

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

¿La diferencia se refieren a cualquier concepto de programación orientada a objetos estoy perdiendo?

+1

$ this-> getDoctrine() -> getEntityManager() está en desuso en Symfony 2 – bitek

Respuesta

8

En general, no hay diferencia, ya que

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

es sólo un ayudante para

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

Puede tener varios gestores de entidad, y entonces habrá una ligera diferencia en conseguir un repositorio de uno:

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

Pero, una vez más, no hay diferencia en el resultado que obtendrá.

En igualdad de condiciones, elegiría la más corta.

1

El resultado es el mismo, pero si usted necesita el entityManager para algo más que conseguir el repositorio, que podría ser útil para almacenarla y luego recibir el repositorio, así como hacer otras operaciones tales como rubor:

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

Como dije antes, si solo necesita obtener el Repositorio, vaya con la segunda declaración, que es más corta y fácil de leer que la primera.

1

No hay diferencia. Si miras el código fuente de AbstractManagerRegistry.php. Se puede ver este código:

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

Como se puede ver, cuando se llama getRepository(), llama primero getManager() y luego getRepository(). Sugeriría usar el segundo ya que da intellisense en IDEs como PHPStorm. Espero eso ayude.

Cuestiones relacionadas