2011-11-29 11 views
8

v'è alcuna differenza tra queste due affermazioni:getEntityManager() e getDoctrine() in Symfony2

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

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

Fa la differenza si riferiscono a qualsiasi concetto OOP mi manca fuori?

+1

$ this-> getDoctrine() -> getEntityManager() è deprecato in Symfony 2 – bitek

risposta

8

In generale, nessuna differenza, dal momento che

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

è solo un aiuto per

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

è possibile avere diversi gestori di entità, e poi ci sarà una leggera differenza a ottenere un repository da uno:

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

Ma ancora, nessuna differenza nel risultato che otterrete.

A parità di condizioni, sceglierei il più breve.

1

Il risultato è lo stesso, ma se avete bisogno di entityManager per più di ottenere il repository, potrebbe essere utile per memorizzare e poi ricevere il repository e fare altre operazioni come filo:

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

Come detto prima, se hai solo bisogno di ottenere il repository, vai con la seconda affermazione, che è più breve e facile da leggere come la prima.

1

Non c'è differenza. Se si guarda il codice sorgente di AbstractManagerRegistry.php. Si può vedere questo codice:

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

Come si può vedere, quando si chiama getRepository(), chiama prima getManager() e poi getRepository(). Suggerirei di usare il secondo dato che dà intellisenza in IDE come PHPStorm. Spero che sia d'aiuto.