L'ORM Doctrine
Comprendre et utiliser l'ORM (Object-Relational Mapping) Doctrine dans Symfony pour interagir avec la base de données.


Notions théoriques
Doctrine est une bibliothèque PHP qui fournit des fonctionnalités pour interagir avec les bases de données.
Doctrine est un ORM (Object-Relational Mapping), ce qui signifie qu'il nous permet de travailler avec les bases de données en utilisant des objets PHP.
Pour utiliser Doctrine, vous devez d'abord configurer votre connexion à la base de données. Cela se fait généralement dans le fichier .env.local de votre projet, où vous pouvez définir la variable d'environnement DATABASE_URL avec les informations de votre base de données.
Une fois que vous avez configuré votre base de données, vous pouvez commencer à définir des entités. Une entité est une classe PHP qui représente une table de votre base de données. Chaque propriété de l'entité représente une colonne de la table.
Exemple de mise en application
Commençons par configurer notre base de données.
-
Copiez le fichier
.enven.env.local -
Ouvrez le fichier
.env.localet définissezDATABASE_URLavec vos informations de base de données.Par exemple :
DATABASE_URL="mysql://user:password@localhost:3306/my_game"
Ensuite, nous allons définir une entité Player pour représenter les joueurs de notre jeu avec les propriétés id et name.
Pour cela, créez un nouveau fichier src/Entity/Player.php et ajoutez le code suivant :
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
class Player
{
#[ORM\Id, ORM\GeneratedValue, ORM\Column(type: "integer")]
private int $id;
#[ORM\Column(type: "string", length: 100)]
private string $name;
// getters and setters...
}
Dans cet exemple, nous avons défini une entité Player avec deux propriétés : id et name. Chaque joueur aura un ID unique et un nom.
Il est conseillé de préciser le nom de la table dans l'entité, en utilisant par exemple les attributs PHP >= 8, sous la forme :
#[ORM\Table(name: 'nom_de_la_table')]
Par exemple, voici le la ligne à ajouter, pour que l'entity Player utilise la table tbl_player :
#[ORM\Entity]
#[ORM\Table(name: 'tbl_player')]
class Player
{
...
}
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Votre défi pour aujourd'hui consiste à créer votre première entité.
Créez une nouvelle entité Game avec les propriétés id et name (comme dans l'exemple) qui utilisera la table tbl_game.
1. Créez le fichier Game.php dans le dossier src/Entity avec la commande :
php bin/console make:entity Game
2. Précisez le nom de la table tbl_game pour l'entité Game en utilisant les attributs PHP 8.
Sans #[ORM\Table(name: 'tbl_game')], Doctrine génère automatiquement un nom de table
à partir du nom de la classe (ex. game). Si la classe est renommée un jour,
le nom de table change également, ce qui peut provoquer des erreurs en production.
Nommer explicitement la table protège contre ce type de régression silencieuse.
3. Ajoutez une propriété name de type string à l'entité Game avec une longueur maximale de 100 caractères.
4. Ajoutez une propriété description de type string à l'entité Game avec une longueur maximale de 1000 caractères.
5. Créer un fichier .env.local pour indiquer les informations de connexion à la base de données.
- Créez un fichier
.env.localà la racine de votre projet Symfony. - Ouvrez le fichier
.env.localet ajoutez la variable d'environnementDATABASE_URL, afin d'indiquer les informations de connexion à la base de données.
Voici le contenu du fichier .env.local à créer, avec les informations de connexion à votre base de données :
DATABASE_URL="mysql://user:password@localhost:3306/my_game"
6. Copiez le fichier .env en .env.local et renseignez les informations de connexion à votre base de données.
Notre base de données s'appelle my_game, et les informations de connexion sont les suivantes :
- user :
my_game - password :
1MotDePasseTresSecurise - host :
localhost - port :
3306
7. Vérifiez que la connexion à la base de données est correctement configurée en exécutant la commande suivante :
php bin/console doctrine:database:connect
Une solution complète pour le TP
Vous devez être connecté pour voir le contenu.
Nous allons continuer à travailler avec cette entité
Gamedans les prochaines sections, pour apprendre à créer des enregistrements dans la base de données, les lire, les mettre à jour et les supprimer.