Publié le : 02/08/2021

Interagir avec une base de données en utilisant Doctrine dans Symfony

Interagir avec une base de données en utilisant Doctrine dans Symfony

Pour interagir avec une base de données, Symfony peut le faire en utilisant du SQL classique avec du PDO ou un ORM comme Doctrine.

Mais il faut garder à l’esprit qu’avec une application faite sous Symfony, la base de données n’est pas indispensables. En effet, on peut avoir d’autres sources de données comme les web services, des fichiers, etc… Mais aussi, le modèle lui même n’est pas obligatoire car on peut ne pas avoir besoin de données.

Mais si on a besoin d’une base de données, la grande majorité des développeurs vont utiliser Doctrine. Il faut aussi savoir que Doctrine est un projet PHP qui est indépendant de Symfony. En effet, on peut utiliser d’autres moyen pour communiquer avec la base de données.

Doctrine est un ORM

Doctrine est un ORM ou Object Relational Mapper. Un ORM est une classe qui permet d’écrire des codes en PHP et qui le transforme après en requête SQL automatiquement.

Pour expliquer comment fonctionne les ORM, prenons un exemple. Si on va créer une classe Voiture avec des variables, l’ORM, grâce à des annotations va créer la table Voiture dans la base de données et les variables de la classe seront les colonnes de la table. Ce qui est intéressant ici c’est que les requêtes SQL qui vont être générées sera adapté à la base de données choisie (MySql, MariaDB, PostgreSQL, etc…). La figure suivant représente cette fonctionnement.

Fonctionnement d'un ORM

C’est pareil aussi en ce qui concerne les codes DML (Data Manipulation Language ou Langage de Manipulation de Données). Par exemple si on va exécuter les instructions PHP ci-dessous, les codes SQL correspondant vont être générés.

$v = new Voiture();
$v->setNom("Twingo");
$v->setPrix("9000");
Symfony Doctrine Devient INSERT INTO Voiture (nom,prix) VALUES ('Twingo','9000');

Installation de Doctrine dans Symfony

Pour installer Doctrine, il faut installer le pack Symfony orm. La commande ci-dessous est la commande d’installation du pack.

$ composer require symfony/orm-pack

On peut aussi installer le bundle MakerBundle, qui va aider à la génération de divers codes, avec la commande :

$ composer require --dev symfony/maker-bundle

Configuration de l’accès à la base de données avec Doctrine dans Symfony

Pour configurer l’accès à la base de données avec Doctrine dans Symfony, il faut le faire dans le fichier .env. Dans ce fichier il faut chercher et modifier la variable DATABASE_URL. Par exemple, pour se connecter avec MySql ou MariaDB, on va avoir :

DATABASE_URL = mysql://utilisateur:mot_de_passe@localhost:3306/base_de_donnees

Il est à noter ici que le DATABASE_URL est un URL alors pour les mots de passe avec des caractères spéciaux, il faut les transformer en URL valide.

Pour créer la base de données, nous allons exécuter la commande :

$ symfony console doctrine:database:create

C’est cette commande qui va créer la base de données base_de_donnees qui a été défini dans le variable d’évènement de Symfony DATABASE_URL.

Création d’une entité Doctrine dans Symfony

Une fois que l’on a créé la base de données, nous allons maintenant créer une entité Doctrine. Une entité Doctrine est une classe PHP qui va contenir l’architecture de notre Table dans la base de données.

Pour ce faire, nous allons exécuter la commande :

$ symfony console make:entity

La vidéo ci-dessous nous montre comment faire la création d’un entité Doctrine avec Symfony.

Dans cette vidéo, nous avons vu :

  • l’utilisation de la migration pour gérer le versionning de la base de données avec la commande : symfony console make:migration ;
  • et l’application de ces migrations à la base de données : symfony console doctrine:migrations:migrate

Maintenant si vous avez besoin de modifier la structure d’une table ou d’une base de données toute entière, vous pouvez voir cet article.

Les mots clés rattachés à cet article : Base de données  -  Doctrine  -  Symfony

Nos clients

Une vingtaine de clients nationaux et internationaux