2016-04-22 11 views
1

ich Instanz von Entity Manager erstellenLehre - ich bin immer Entity-Klasse anstelle von Repository-Klasse

$this->em = Connection::MainMySql()->GetEntityManager(); 

Nach einigen Abfragen ich versuche Objekt aus einem Repository-Klasse.

$usersArray = $this->em->createQueryBuilder() 
         ->select("us") 
         ->from('Model\Repo\mytables\User', "us") 
         ->where("us.idUser = :idUser") 
         ->setParameter("idUser", $idUser) 
         ->getQuery() 
         ->execute(); 

Warum ich dann die Liste der Objekte der Klasse Modell \ Entity erhalten \ mytables \ User statt Modell \ Repo \ mytables \ User, auch nachdem ich in von (...) Abschnitt gewünschte Klasse angeben?

Antwort

2

Tatsächlich kann ein Repository nicht als Repräsentation eines Datenbankeintrags verwendet werden.
Mit anderen Worten, Repositorys sollten Methoden zum Abrufen/Erstellen/Aktualisieren/Löschen von Datenbankeinträgen enthalten, die durch Entities dargestellt werden.

Aus diesem Grund wird der EntityManager Entität Manager genannt, er verwaltet Entitäten und nicht Repository-Klassen.

Zum Beispiel können Sie perfekt machen:

// Return an instance of the Repository Model\Repo\mytables\User 
$repository = $this->em->getRepository('Model\Entity\mytables\User'); 

// The repository is used to create the QueryBuilder, so the from statement is already filled by doctrine as model\Entity\mytables\User 
$query = $repository->createQueryBuilder('u') 
// ... 

Aus diesem Grund können Sie auch tun:

$repository = $this->em->getRepository('Model\Entity\mytables\User'); 
// Return all entries of the 'users' table as Model\Entity\mytables\User instances 
$users = $repository->findAll(); 

Ich bin überrascht, dass die from Anweisung der Abfrage nicht produzieren ein Fehler wie "Model \ Entity \ mytables \ User ist keine gültige Entität".

Auch Ihre Struktur sieht verwirrend aus, Sie müssen Repositories (die Modelle) ordnungsgemäß von Entitäten unterscheiden, um sie entsprechend ihren jeweiligen Rollen zu verwenden.