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

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...

Plus en détail

Symfony et Dailymotion : une migration réussie

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...

Plus en détail