O.R.M. Doctrine Requêtes via Repository des entités Requêtes via
Transcription
O.R.M. Doctrine Requêtes via Repository des entités Requêtes via
O.R.M. Doctrine Requêtes via Repository des entités Requêtes via Repository des entités DQL : Doctrine Query Language 171 Symfony 2 – Repository des entités Symfony y y_03 Le repository de chaque entité permet de créer des requêtes personnalisées, et de les utiliser directement via l'entité Exemple : Utilisation du repository de l'entité Villageois entité : Villageois.php repository : it Vill VillageoisRepository.php iR it h <?php namespace Mmi\lesGauloisBundle\Entity; use Doctrine\ORM\EntityRepository; class VillageoisRepository extends EntityRepository { // Méthodes spécifiques à intégrer } 172 Symfony 2 – DQL Symfony y y_03 DQL : Doctrine Query Language Langage objet d'interrogation des entités Utilise comme le langage SQL des requêtes de type : Utili l l SQL d êt d t SELECT, UPDATE, DELETE, DELETE mais pas INSERT Mais pour la manipulation des objets et non des colonnes de table Mais pour la manipulation des objets et non des colonnes de table 173 Symfony 2 – Repository des entités Symfony y y_03 Création d'une requête spécifique ramenant les villageois, dont la première lettre commence par "A" : Nom de la méthode : getVillageoisA() <?php namespace Mmi\lesGauloisBundle\Entity; use Doctrine\ORM\EntityRepository; class VillageoisRepository extends EntityRepository { public function getVillageoisA(){ $query ="SELECT v FROM MmilesGauloisBundle:Villageois v WHERE v.nom LIKE 'A%'"; return $this->getEntityManager() ->createQuery($query) ->getResult(); } } 174 VillageoisRepository.php Symfony 2 – Repository des entités Symfony y y_03 getVillageoisA() : syntaxe : la requête ... public function getVillageoisA(){ Entité concernée et alias $query =" SELECT v FROM MmilesGauloisBundle:Villageois v WHERE v.nom LIKE 'A%'"; condition ... Att ib t Attribut concerné appelé via l'alias é lé i l' li On ne travaille pas directement pas sur les tables et colonnes, mais par les entités et leurs attributs 175 Symfony 2 – Repository des entités Symfony y y_03 getVillageoisA() : syntaxe : le traitement de la requête Appel de l'entity Appel de l entity manager de Doctrine 2 manager de Doctrine 2 ... return $this->getEntityManager() ->createQuery($query) ->getResult(); >getResult(); Création , envoi de la requête } } ... Récupération du résultat de la requête Renvoi du résultat du traitement de la requête vers le programme appelant Entity Manager : gestionnaire d'entités de Doctrine, qui est responsable de la gestion du processus de persistance et de récupération des objets vers et depuis la base de données base de données 176 Symfony 2 – Repository des entités Symfony y y_03 Utilisation de getVillageoisA() : ... echo "Utilisation Utilisation de getVillageoisA()<br/> getVillageoisA()<br/>"; ; $repository = $this->getDoctrine() ->getRepository('MmilesGauloisBundle:Villageois'); $listeVillageois = $repository->getVillageoisA(); foreach($listeVillageois as $villageois){ echo ".... .... nom : ".$villageois->getNom()."<br/>"; .$villageois >getNom(). <br/> ; } ... LesGauloisController.php On effectue la requête de la même manière que si c'était une fonction de base de Doctrine 2 177 Symfony 2 – Repository des entités Symfony y y_03 Utilisation de getVillageoisA() : 178 Symfony 2 – Repository des entités Symfony y y_03 Possibilité d'utiliser des paramètres Exemple création de la méthode : getVillageoisParLettre(paramètre) Permet de ramener la liste des villageois dont le nom commence par la lettre passée en P td l li t d ill i d tl l l tt é paramètre ... public function getVillageoisParLettre($lettre){ $query =" SELECT v FROM MmilesGauloisBundle:Villageois v WHERE v.nom LIKE '".$lettre."%'"; return $this->getEntityManager() ->createQuery($query) ->getResult(); } ... 179 VillageoisRepository.php Symfony 2 – Repository des entités Symfony y y_03 Programme appelant : ... echo h "Utilisation "Utili ti d de getVillageoisParLettre(parametre) tVill i P L tt ( t ) :<br/>"; <b />" $repository = $this->getDoctrine() ->getRepository('MmilesGauloisBundle:Villageois'); g p y( g ) $lettre = "O"; $listeVillageois = $repository->getVillageoisParLettre($lettre); foreach($listeVillageois f h($li t Vill i as $villageois){ $ ill i ){ echo ".... nom : ".$villageois->getNom()."<br/>"; } .. LesGauloisController.php 180 Symfony 2 – Repository des entités Symfony y y_03 Résultat : 181 Symfony 2 – Jointure Symfony y y_03 Exemple : Liste des villageois et de leur adresse, pour ceux habitant dans un lieu particulier (passé en paramètre) ... public function getVillageoisParLieu($lieu){ $query =" SELECT v FROM MmilesGauloisBundle:Villageois il l i dl ill i v JOIN v.leLieu l WHERE l.nom = '.$lieu.' ORDER BY v.nom"; return $this->getEntityManager() $this >getEntityManager() ->createQuery($query) ->getResult(); } ... VillageoisRepository.php 182 Symfony 2 – Jointure Appel de la méthode : Symfony y y_03 ... echo "Utilisation de getVillageoisParLieu(parametre) :<br/>"; $repository = $this->getDoctrine() ->getRepository('MmilesGauloisBundle:Villageois'); $listeVillageois = $repository ->getVillageoisParLieu("Village Gaulois"); foreach f h ($listeVillageois ($li t Vill i as $villageois) $ ill i ) { echo ".... nom : " . $villageois->getNom() . "<br/>"; } ... LesGauloisController.php 183 Symfony 2 – Jointure Symfony y y_03 Exemple : Liste des villageois habitant dans un lieu où s'est déroulée une bataille à laquelle ils ont participé 184 Symfony 2 – Jointure Symfony y y_03 Exemple : Liste des villageois habitant dans un lieu où s'est déroulée une bataille à laquelle ils ont participé ... public function getVillageoisBataille() { $query $q y = "SELECT v FROM MmilesGauloisBundle:Villageois v JOIN v.leLieu l JOIN v.priseCasque pc JOIN pc.bataille b t ill b JOIN b.leLieu lb WHERE l.nom = lb.nom ORDER BY v.nom"; return $this->getEntityManager() ->createQuery($query) ->getResult(); } ... 185 VillageoisRepository.php Symfony 2 – Repository des entités Symfony y y_03 Programme appelant : ... echo "Utilisation de getVillageoisBataille() :<br/>"; $repository = $this->getDoctrine() ->getRepository('MmilesGauloisBundle:Villageois'); $listeVillageois = $repository->getVillageoisBataille(); foreach ($listeVillageois as $villageois) { echo ".... nom : " . $villageois->getNom()." - lieu habitat : " .$villageois->getLeLieu()->getNom()."<br/>"; foreach ($villageois->getPriseCasque() as $priseCasque) { echo "....... bataille : ".$priseCasque->getBataille()->getNom() ." - lieu : " .$priseCasque->getBataille()->getLeLieu()->getNom(). $priseCasque->getBataille()->getLeLieu()->getNom() "<br/>"; <br/> ; } } ... L G l iC LesGauloisController.php ll h 186 Symfony 2 – Repository des entités Symfony y y_03 Résultat : 187
Documents pareils
O.R.M. Doctrine Autres requêtes via Repository
// Appel de Doctrine 2 et son repository
$repository = $this->getDoctrine()
->getRepository('MmilesGauloisBundle:Villageois');
g
p
y
g
// Recherche du villageois par son id (40 => Asterix)
$unVilla...
Symfony et Dailymotion : une migration réussie
• Passer moins de temps à réinventer la roue et pouvoir
se concentrer sur le code métier
• Une base de code saine, documentée et cohérente
• Cadrer les développeurs en leur imposant certaines
bo...