Aller au contenu principal

Doctrine - Le modèle et la BDD

L'ORM Doctrine​

Doctrine est un ORM (Object-Relational Mapper), un outil nous permettant de définir des classes représentant notre modèle : la base de données.

Par la suite, Doctrine convertit ces classes en relations (ou tables) dans la base de données configurée. Il nous permet donc de nous concentrer sur la logique orientée objet et de nous aider dans la communication avec la base de données.

Pour ce faire, on configurera un accès à une base de données dans l'application Symfony, puis on utilisera la console pour créer des entités : en gros, les tables de notre BDD. Au sein des entités, on décrira les différentes propriétés de notre classe qui seront traduites en colonnes de notre table. On pourra également définir des associations (ou relations) entre différentes entités, qui seront gérées et traduites automatiquement par Doctrine.

En parallèle de ces entités seront créés des repositories. Les repositories seront des classes enregistrées par Symfony, qu'on pourra utiliser pour communiquer avec la base de données (trouver un élément, récupérer une liste d'éléments, etc...). On aura donc un repository par table.

Symfony & Doctrine

On peut tout à fait utiliser l'ORM Doctrine en-dehors d'une application Symfony. Les commandes qu'on va utiliser avec la console nous aident, dans le cadre de Symfony, à effectuer certaines tâches relatives à Doctrine

Configuration​

On va renseigner dans un ficher de variables d'environnement les coordonnées d'accès à la base de données, via la variable DATABASE_URL.

Fichiers .env / .env.local

Avant de pouvoir effectuer des mises à jour dans la base de données, il faut renseigner l'URL d'accès à la base de données dans le fichier .env.local, qui n'est pas intégré au gestionnaire de versions (Documentation)

Un exemple par défaut pour MySQL se trouve en commentaire dans le fichier .env :

# Format : driver://user:pass@host:port/dbname?serverVersion=X&charset=utf8mb4
DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8&charset=utf8mb4"

On retrouve plus ou moins les mêmes informations de connexion que celles nécessaires à la création d'un DSN avec PDO

Par la suite, on va pouvoir demander à Doctrine de créer la base de données pour nous avec la commande suivante :

php bin/console doctrine:database:create
# Ou, plus court
php bin/console d:d:c