0% ont trouvé ce document utile (0 vote)
64 vues55 pages

Doctrine VF

Transféré par

roudaina.saoudi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
64 vues55 pages

Doctrine VF

Transféré par

roudaina.saoudi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

L’ORM

(Object-Relational Mapping) :
Doctrine
UP Web
AU: 2021/2022

1
Plan

1. Introduction
2. Doctrine2
3. Les entités
4. La Migration
5. Les formulaires
6. Entity Manager: Manipuler les entités avec Doctrine2
7. Les relations entres entités avec Doctrine2

2
Introduction
❑ La programmation Orientée Objet, utilisant une base de
données relationnelle, nécessite de convertir les
données relationnelles en objets et vice-versa.

❑ Persistance d’objets métiers : les objets modélisés dans


les applications sont associées à des données stockées
dans les SGBDR

3
Object-Relational Mapping (ORM)
❑ C’est une couche d’abstraction à la base de donnée.
❑ ORM fait la relation entre les données orientées objet et
les données relationnelles.

4
Object-Relational Mapping
Avantages:
❑ Simplifie l’accès aux données
❑ Facilite le changement de SGBDR
❑ une indépendance du code vis-à-vis du SGBDR utilisé

5
Object-Relational Mapping
❑ Les ORM les plus connus:
En Java: - Hibernate
- JPA (Java Persistance API)
- SimpleORM
En .NET: - Nhibernate
- Entity Framework
Quel choix pour PHP:
- Doctrine
- Propel
- RedBean
6
Doctrine

❑ C’est un ORM pour PHP


❑ Logiciel open source
❑ Dernière version stable: 2.7.3
❑ Intégré dans différents Frameworks:
■ Symfony,
■ Zend Framework
■ CodeIgniter

7
Doctrine - Caractéristiques
Une classe qui correspond à chaque table
Une classe = une « Entité »

8
Doctrine – Architecture Technique

9
Architecture Technique de Doctrine
Doctrine - Caractéristiques

On a deux méthodes pour le Mapping:


● Fichier de mapping YAML, XML.
● Directement dans la classe via des annotations

10
Configuration de la base de
données
Configurer la base de données de l’application
dans le fichier .env

Nom de la base de 11
données par Mot de passe de la
Création de la base de données

La commande suivante permet de créer une base de données :

php bin/console doctrine:database:create

=>Une base de données avec les propriétés mentionnées dans


.env sera automatiquement générée

12
Les entités
Il existe deux méthodes pour générer les entités :

1. Méthode manuelle (non recommandée)


❑ Créer la classe
❑ Ajouter le mapping
❑ Ajouter les getters et les setters (manuellement ou en utilisant
la commande suivante :
➔ php bin/console make:entity --regenerate App

13
Les entités
2. Méthode en utilisant le bundle maker

Ajouter une entité en lançant la commande suivante :


➔ php bin/console make:entity
Ajouter les attributs et les paramètres

14
Les entités
Configuration de l’entité:

● @ORM\Id(): spécifie la clé primaire


● @ORM\GeneratedValue(): auto-incrémentée l’ID
● @ORM\Column: s'applique sur un attribut
de la classe et permet de définir les caractéristiques
de la colonne concernée (nom , taille , types, etc.)

15
La Migration
La migration permet de tracker les différents changements et évolutions de votre base
de données
Une image = Une évolution de la base de donnée
La commande ci-dessous nous permet de créer un fichier de migration:
➔ php bin/console make:migration

La commande ci-dessous nous permet de lancer une migration:


➔ php bin/console doctrine:migrations:migrate
Le fichier de migration est générée en se basant sur la date et l’heure actuelle sous le
nom « YYYYMMDDHHMMSS »
Le nom de fichier de migration est un timestamp(La valeur représentant la date et
l'heure est appelée timestamp) qui sera stocké dans la base dans une table
doctrine_migration_versions.
16
La Migration
Chaque fichier de migration possède trois méthodes:

⮚ La methode getDescription() :permet de décrire la migration


⮚ La méthode up(): est exécutée lorsqu’on applique la migration en utilisant la
commande ”php bin/console doctrine:migrations:migrate”

⮚ La méthode down() :est exécutée lorsqu’on annule la migration en utilisant la


commande ”php bin/console doctrine:migrations:migrate prev”

17
La Migration
doctrine:migrations:current Afficher la version actuelle

doctrine:migrations:execute version Exécuter une seule version de migration

doctrine:migrations:generate Créer un fichier de migration vide

doctrine:migrations:latest Afficher la dernière version migration

doctrine:migrations:migrate Exécuter toutes les versions de migrations non


exécutées
doctrine:migrations:status Afficher l'état d'un ensemble de migrations

doctrine:migrations:up-to-date Nous indiquer si le schéma est à jour

doctrine:migrations:version version -- add/delete Ajouter ou supprimer manuellement les versions de


migration de la table des versions.
doctrine:migrations:sync-metadata-storage Vérifier si le stockage des métadonnées est à jour

doctrine:migrations:list Afficher la liste de toutes les migrations disponibles et


leur état
doctrine:migrations:migrate next Executer la méthode up de la premiere migration
générée et non exécutée (une seule)
doctrine:migrations:migrate prev Exécuter la méthode down de la dernière migration
(*) version: namespace\version
Exemple: DoctrineMigrations\Version20201013084414
18
Le Repository
❏ Pour chaque entité, il existe un Repository (Exemple: StudentRepository
est associé à l’entité Student)
❏ Un Repository centralise tout ce qui touche à la récupération des entités
❏ C’est une classe PHP qui contient les méthodes de récupération de
données relatives aux entités.
❏ Un Repository utilise plusieurs types d'entité, dans le cas d'une jointure
par exemple.
❏ L’appel de la classe Repository se fait dans la classe Entity:

19
Le Repository
Il existe 2 façons pour récupérer le repository
Les repositories héritent de la classe Doctrine\ORM\EntityRepository
$repository=$this->getDoctrine()->getRepository(NomClasse::class);
En utilisatant l'injection de dépendance
public function listStudent(StudentRepository $repository)
Il existe 3 façons pour récupérer les objets :
• les méthodes de récupération de base: findAll(),findBy(),find($id)
• les méthodes magiques findByX(), findOneByX()
• les méthodes de récupération personnalisées: DQL/QueryBuilder

20
Les méthodes de
récupération de base

Méthode Description
find($id) Trouver un objet à partir son id
findAll() Trouver tous les objets
findBy() Trouver plusieurs objets à partir d’un ou plusieurs
d’attributs
findOneBy() même principe que findBy mais elle retourne un
seul objet

21
Les méthodes de
récupération de base
La méthode: findAll()
❏ Rôle : retourne toutes les objets ou les enregistrement contenue dans
la base de données. Le format de retour est un tableau PHP normal
(un array).

❏ Exemple :

$students=$this->getDoctrine()-
>getRepository(Student::class)->findAll();

22
Les méthodes de
récupération de base
La méthode: find($id)
❏ Rôle : retourne l’objets ou l’enregistrement qui correspond à la clé
primaire passé en argument. Généralement cette clé est l’id.

❏ Exemple :

$student=$this->getDoctrine()-
>getRepository(Student::class)->find(2);

23
Les méthodes de
récupération de base
La méthode: findBy()
❏ Rôle: permet de retourner une liste d’objets en appliquant
un filtre pour ne retourner que les entités correspondant à
un ou plusieurs critère(s).
❏ Syntaxe:
$repository->findBy(
array $criteria,
array $orderBy = null,
$limit = null,
$offset = null );

❏ Exemple :
$student=$this->getDoctrine()-
>getRepository(Student::class)->findBy(array('lastname' =>
'foulen','firstname' => 'ben foulen'),array('lastname' =>
'desc'),10, 0);
24
Les méthodes de
récupération de base
La méthode: findOneBy()
❏ Rôle: Même principe que findBy() mais en retournant un seul
objet ce qui élimine automatiquement les paramètres d’ordre
de limite et d’offset
❏ Syntaxe:
findOneBy(array $criteria, array $orderBy = null)

❏ Exemple :
$student=$this->getDoctrine()-
>getRepository(Student::class)-
>findOneBy(array('lastname' => 'foulen','firstname' =>
'ben foulen'));

25
Les méthodes de
récupération magiques
Méthode Description

findByX($valeur) en Similaire à findBy() avec un


remplaçant X par un seul critère, celui du nom de
attribut de l’objet la méthode
Exemple:
findBynsc(‘05896542’)
findByNom(‘Club Info’)
findOneByX($valeur) en Similaire à findOneBy()
remplaçant X par un mais en retournant un seul
attribut de l’objet objet
Exemple:
findOneBynsc(‘05896542’)
26
Entity Manager
❑ EM est un gestionnaire d’entités: le chef d’orchestre de l’ORM
Doctrine
❑ EM est placée entre les objets (entités) et les tables de la base
de données.
❑ EM permet l’insertion, la mise à jour et la suppression des
données de la base de données
Tout d’abord, On doit récupérer l’entity manager
$em= $this->getDoctrine()->getManager()

27
Manipulation des entités avec
Doctrine2
• La méthode persist() :Utilisée pour l‘ajout d’un nouvel objet afin
d’informer Doctrine que l’on veut ajouter cet objet dans la base de
données.
⮚ $em->persist($object)
• La méthode flush() permet d'envoyer tout ce qui a été persisté avant
à la base de données afin d’exécuter la requête. Cette méthode est
utilisée pour l‘ajout, la modification et la suppression
⮚ $em->flush()

28
Manipulation les entités avec
Doctrine2
• La méthode remove() indique à Doctrine d’exécuter la requête de
suppression de l'entité en argument de la base de données
⮚ $em->remove($object)
• La méthode clear() permet d’annuler tous les persist
⮚ $em->clear()
• La méthode detach() permet d’annuler le persist effectué sur
l’entité en argument
⮚ $em->detach($object)

29
Création d’un Formulaire
• Un formulaire Symfony est l’image d’un objet existant

• Un formulaire sert à alimenter un objet.


• Un formulaire sert à récupérer des informations
indépendantes de n’importe quel objet.
• Pour installer les dépendances du formulaire, il faut exécuter
cette commande: composer require symfony/form

30
Création d’un Formulaire

Principe

On peut définir un formulaire soit:


1. dans le contrôleur
2. dans un autre fichier qui sera appelé par le contrôleur

31
Création d’un Formulaire
Méthode 1: Création d’un formulaire dans le contrôleur

Pour indiquer les champs à ajouter au formulaire on utilise la méthode


add du FromBuilder

Cette méthode contient 3 paramètres :


1) le nom du champ dans le formulaire
2) le type du champ
3) Un tableau (array,[]) qui contient des options spécifiques au type du
champ

32
Création d’un Formulaire

Problématique:
Comment alléger le contrôleur ?

Solution:
Générer une classe qui s’occupe de la construction d’un formulaire

Comment?
utilisation de la commande:
php bin/console make:form FormName

33
Création d’un Formulaire
Méthode 2: Utilisation de la commande
La commande suivante nous permet de créer un Formulaire :
php bin/console make:form FormName

Maker vous demandera si votre formulaire est associé à une entité


ou non. Répondez selon votre besoin.

Un objet dont le nom est « FormNameType » sera automatiquement


créé dans le dossier src/Form et qui contient une fonction buildForm

34
Création d’un Formulaire

Récupération du formulaire dans le contrôleur

La récupération du formulaire au niveau des contrôleurs devient


beaucoup plus facile :

Le second paramètre « $nomClass» n’est pas obligatoire

35
Création d’un Formulaire
Types dans le formulaire:
il existe différents types proposé par Symfony pour les champs d'un
formulaire dont chaque champ possède un nom, un type et des
options.

36
Création d’un Formulaire
Champ choice particulier:
Les choices Type seront chargés à partir des éléments d’une entité Doctrine.
Il existe différentes façon d'implémenter ces choices type. Les plus
importants sont les deux attributs expanded et multiple qui construisent la
façon d'afficher cette liste de choix.

37
Création d’un Formulaire
L’envoi du formulaire à la page twig

➔ return $this->render('formation/.html.twig', ['formA' => $form->createView()]);

Affichage du formulaire dans TWIG


⮚ Afficher la totalité du formulaire avec la méthode form()
qui affiche le formulaire sans aucune mise en forme
{{ form(nomDuFormulaire) }}

38
Création d’un Formulaire
Afficher les composants du formulaire séparément un à un d’une façon
personnalisée
{{ form(nomDuFormulaire) }}
=
Form_start(): est l’équivalent de <form> en HTML
Form_errors(): affiche les erreurs relatives au champ passé en argument
Form_label(): affiche le label HTML d’un élément du formulaire
Form_widget(): affiche le champ du formulaire
Form_help(): affiche l’aide relatives au champ donné
Form_row(): est l’équivalent de form_label + form_errors + form_widget

39
Création d’un Formulaire

40
Les relations entre les entités
Les types de relation possibles
Une relation (ou une association) peut être:

➢ Unidirectionnelle : Seules les instances de l’une des entités de l’association


peuvent retrouver les instances de l’entité partenaire.
⇒ Par exemple : un utilisateur peut obtenir la liste de ses adresses
connues, par contre il n’est pas possible de retrouver un utilisateur à partir
d’une adresse.

41
Les relations entre les entités

Limites:
❏ Les relations sont unidirectionnelles
❏ On peut faire $student->getProjects()
❏ Mais on ne peut pas faire $project->getStudent()

Solution:
❏ Rendre les relations bidirectionnelles

42
Les relations entre les entités
Les types de relation possibles

➢ Bidirectionnelle: Les instances de l’une ou de l’autre des entités de


l’association peuvent retrouver les instances de l’entité partenaire.
⇒ Par exemple : un utilisateur peut obtenir la liste des commandes
qu’il a effectué et on peut retrouver un utilisateur à partir d’une commande.

43
Les relations entre les entités
One To One ,bidirectionnel
Exemple : un étudiant possède son propre carte d’étudiant.

⇒ mappedBy fait référence à


l’attribut student dans la
classe Studentcart

⇒ inversedBy fait référence à


l’attribut cart dans la classe
Adresse 44
Les relations entre les entités
One To Many ,bidirectionnel
Exemple : Une classe contient plusieurs étudiants.

❏ targetEntity : namespace complet vers


l’entité liée.
❏ mappedBy : il s’agit de l’attribut de l’entité
cible qui illustre la relation entre les deux
entités

NB : Obligatoirement dans l’entité target il


faut avoir une définition d’attribut avec le
mot clé ManyToOne

45
Les relations entre les entités
Many To Many ,bidirectionnelle avec table de jointure

❏On peut générer la relation entre les deux entités


automatiquement:
Prenons l’exemple d’une relation ManyToMany
⇒ Plusieurs étudiants peuvent appartenir à plusieurs clubs.
❏ On doit tout d’abord modifier notre entité “Student” en tapant
la commande suivante:

46
Les relations entre les entités
Many To Many ,bidirectionnelle avec table de jointure

❏ Maintenant il faut ajouter l’attribut, dans notre cas “clubs”:

❏ Spécifier le nom de la classe avec laquelle est reliée qui “Club”:

❏ Spécifier le type de cet attribut, tapez “relation” :

47
Les relations entre les entités
Many To Many ,bidirectionnelle avec table de jointure

❏ Par la suite , veuillez indiquer le type de relation : ManyToMany

48
Les relations entre les entités
Many To Many ,bidirectionnelle avec table de jointure

Student.php

Club.php

49
Les relations entre les entités
Cascade

Dans doctrine2, toutes les opérations de cascade sont par


défaut désactivées, c’est à dire qu'aucune opération ne sera
cascadée.

Si une entité est supprimée ou modifiée, les entités avec


lesquelles elle était en relation ne seront pas supprimées ou
modifiées dans la base de donnée.
Pour réaliser la suppression ou la modification en cascade,
il faut rajouter l’option cascade={“action”} dans le mapping
de l’entité.

50
Les relations entre les entités
Les actions en cascade
persist: Si l’entité est sauvegardée, faire de même avec les
entités associées
remove: Si l’entité est supprimée, faire de même avec les
entités associées.
merge: Cascades fusionne les opérations avec les entités
associées.
detach: Cascades détache les opérations aux entités
associées.
refresh: les opérations d'actualisation des cascades vers
les entités associées.
all: les cascades persistent, suppriment, fusionnent,
actualisent et détachent les opérations aux entités associée
51
Les relations entre les entités
Exemples

exemple

52
Les relations entre les entités
Cascade

Une style de cascade spécial, delete-orphan, s'applique


seulement aux associations un-vers-plusieurs si vous répondez
par oui a la dernière question

53
Atelier 4

54
Références
• https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.htmlhttp://
php.net/manual/fr/language.oop5.magic.php
• https://symfony.com/doc/current/doctrine.html#doctrine-queries

55

Vous aimerez peut-être aussi