Aller au contenu principal

L'ORM Doctrine

Comprendre et utiliser Doctrine dans Symfony

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.

  1. Copiez le fichier .env en .env.local

  2. Ouvrez le fichier .env.local et définissez DATABASE_URL avec 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.

astuce

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


Qu'est-ce que Doctrine dans Symfony ?


Où configure-t-on la connexion à la base de données dans Symfony ?


Qu'est-ce qu'une entité dans Symfony ?


Comment définissons-nous une propriété d'entité dans Symfony avec PHP 8 ?


Quelle classe une entité Symfony doit-elle étendre ?



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.

Une solution