retour
01/05
section 01
Introduction a Doctrine ORM
Connectez-vous pour sauvegarder votre progression et acceder aux quiz
Se connecterDoctrine est l'ORM (Object-Relational Mapping) par defaut de Symfony. Il permet de manipuler la base de donnees en utilisant des objets PHP au lieu d'ecrire des requetes SQL manuellement. Chaque table est representee par une classe PHP appelee "entite".
Configuration de la base de donnees
La connexion se configure dans le fichier .env :
bash# MySQL / MariaDB
DATABASE_URL="mysql://user:[email protected]:3306/mydb?serverVersion=8.0&charset=utf8mb4"
# PostgreSQL
DATABASE_URL="postgresql://user:[email protected]:5432/mydb?serverVersion=16&charset=utf8"
# SQLite (pour le developpement)
DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"bash# Creer la base de donnees
php bin/console doctrine:database:create
# Supprimer la base (ATTENTION !)
php bin/console doctrine:database:drop --forceCreer une entite
bashphp bin/console make:entity ProductLe MakerBundle pose des questions interactives pour chaque propriete. Voici le resultat genere :
php<?php
namespace App\Entity;
use App\Repository\ProductRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ProductRepository::class)]
#[ORM\Table(name: 'products')]
#[ORM\HasLifecycleCallbacks]
class Product
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $name = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $description = null;
#[ORM\Column(type: Types::DECIMAL, precision: 10, scale: 2)]
private ?string $price = null;
#[ORM\Column]
private ?bool $isActive = true;
#[ORM\Column]
private ?\DateTimeImmutable $createdAt = null;
#[ORM\Column(nullable: true)]
private ?\DateTimeImmutable $updatedAt = null;
public function __construct()
{
$this->createdAt = new \DateTimeImmutable();
}
#[ORM\PreUpdate]
public function onPreUpdate(): void
{
$this->updatedAt = new \DateTimeImmutable();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): static
{
$this->name = $name;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): static
{
$this->description = $description;
return $this;
}
public function getPrice(): ?string
{
return $this->price;
}
public function setPrice(string $price): static
{
$this->price = $price;
return $this;
}
public function isActive(): ?bool
{
return $this->isActive;
}
public function setIsActive(bool $isActive): static
{
$this->isActive = $isActive;
return $this;
}
public function getCreatedAt(): ?\DateTimeImmutable
{
return $this->createdAt;
}
}Les attributs PHP 8 (#[ORM\Column], #[ORM\Entity]) remplacent les anciennes annotations Doctrine. Chaque propriete est mappee a une colonne de la table, avec son type SQL, sa longueur, et sa nullabilite.
// voir aussi