Formation DWWM - Développement Web et Web Mobile
# Installation de Doctrine ORM composer require symfony/orm-pack composer require --dev symfony/maker-bundle
# .env DATABASE_URL="mysql://user:password@127.0.0.1:3306/myapp_db?serverVersion=8.0" # Pour PostgreSQL DATABASE_URL="postgresql://user:password@127.0.0.1:5432/myapp_db?serverVersion=13" # Pour SQLite DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
# Créer une entité User php bin/console make:entity User
createdAt = new \DateTimeImmutable();
}
public function getId(): ?int
{
return $this->id;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): static
{
$this->email = $email;
return $this;
}
}
# Texte #[ORM\Column(length: 255)] private ?string $title = null; #[ORM\Column(type: 'text')] private ?string $content = null; # Nombres #[ORM\Column] private ?int $age = null; #[ORM\Column(type: 'decimal', precision: 10, scale: 2)] private ?string $price = null;
# Dates #[ORM\Column] private ?\DateTime $updatedAt = null; #[ORM\Column] private ?\DateTimeImmutable $createdAt = null; # JSON #[ORM\Column] private array $roles = []; # Booléen #[ORM\Column] private bool $isActive = true;
# Créer une migration php bin/console make:migration # Exécuter les migrations php bin/console doctrine:migrations:migrate # Voir le statut php bin/console doctrine:migrations:status # Revenir en arrière php bin/console doctrine:migrations:migrate prev
addSql('CREATE TABLE user (
id INT AUTO_INCREMENT NOT NULL,
email VARCHAR(180) NOT NULL,
name VARCHAR(100) NOT NULL,
created_at DATETIME NOT NULL,
UNIQUE INDEX UNIQ_8D93D649E7927C74 (email),
PRIMARY KEY(id)
)');
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE user');
}
}
setEmail('john@example.com');
$user->setName('John Doe');
$em->persist($user);
$em->flush();
// READ
$user = $em->getRepository(User::class)->find(1);
$users = $em->getRepository(User::class)->findAll();
// UPDATE
$user->setName('Nouveau nom');
$em->flush(); // Pas de persist() nécessaire
// DELETE
$em->remove($user);
$em->flush();
return $this->json(['id' => $user->getId()]);
}
}
findOneBy(['email' => $email]);
}
public function findActiveUsers(): array
{
return $this->findBy(['isActive' => true]);
}
public function findRecentUsers(int $limit = 10): array
{
return $this->createQueryBuilder('u')
->orderBy('u.createdAt', 'DESC')
->setMaxResults($limit)
->getQuery()
->getResult();
}
}
# Recherche par ID
$user = $userRepository->find(1);
# Recherche par critères
$user = $userRepository->findOneBy(['email' => 'user@example.com']);
$users = $userRepository->findBy(['isActive' => true]);
# Recherche avec tri et limite
$users = $userRepository->findBy(
['isActive' => true],
['createdAt' => 'DESC'],
10, // limite
0 // offset
);
# Compter
$count = $userRepository->count(['isActive' => true]);
public function findUsersByFilters(array $filters): array
{
$qb = $this->createQueryBuilder('u');
if (!empty($filters['name'])) {
$qb->andWhere('u.name LIKE :name')
->setParameter('name', '%' . $filters['name'] . '%');
}
if (!empty($filters['email'])) {
$qb->andWhere('u.email = :email')
->setParameter('email', $filters['email']);
}
if (isset($filters['isActive'])) {
$qb->andWhere('u.isActive = :isActive')
->setParameter('isActive', $filters['isActive']);
}
return $qb->orderBy('u.createdAt', 'DESC')
->getQuery()
->getResult();
}
public function findUsersWithArticleCount(): array
{
return $this->createQueryBuilder('u')
->select('u', 'COUNT(a.id) as articleCount')
->leftJoin('u.articles', 'a')
->groupBy('u.id')
->having('articleCount > 0')
->orderBy('articleCount', 'DESC')
->getQuery()
->getResult();
}
# Entity/Article.php
#[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'articles')]
#[ORM\JoinColumn(nullable: false)]
private ?User $author = null;
# Entity/User.php
#[ORM\OneToMany(mappedBy: 'author', targetEntity: Article::class)]
private Collection $articles;
public function __construct()
{
$this->articles = new ArrayCollection();
}
public function addArticle(Article $article): static
{
if (!$this->articles->contains($article)) {
$this->articles->add($article);
$article->setAuthor($this);
}
return $this;
}
Vous maîtrisez maintenant Doctrine ORM !
Créez des applications robustes avec une base de données bien structurée 🚀