Hostinger

Supprimer une donnée existante : la méthode classique vs la méthode automatique

La suppression d'une donnée

Après avoir vu comment insérer et modifier des données, nous allons apprendre à supprimer définitivement un enregistrement de notre base de données.

Tout comme pour la modification, Doctrine a besoin de deux choses pour travailler :

  • Savoir quelle ligne supprimer (récupérer l'objet).
  • Donner l'ordre de suppression à l'EntityManager.

Pour y parvenir, nous allons à nouveau comparer la méthode classique et la méthode automatique !

Créer la méthode de suppression dans le contrôleur

Nous allons ajouter une nouvelle méthode appelée supprimer() dans notre classe ManipulerBddController. Commençons par préparer une réponse simple pour vérifier que notre route fonctionne.

<?php

namespace App\Controller;

use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use App\Repository\ArticleRepository;

final class ManipulerBddController extends AbstractController
{
    // ... (les autres méthodes index et modifier)

    #[Route('/supprimer', name: 'app_supprimer')]
    public function supprimer(): Response
    {
        return new Response('Je vais supprimer une donnée !');
    }
}

En vous rendant sur localhost:8000/supprimer, vous devez voir s'afficher le message de confirmation de la route.

Méthode 1 (supprimer une donnée) : la méthode classique avec find()

C'est la méthode la plus explicite pour un débutant. On utilise le ArticleRepository pour cibler l'article et l'EntityManagerInterface pour valider sa suppression.

Le code de la méthode classique

Dans cet exemple, nous allons chercher à supprimer l'article qui possède l'ID n°5.

#[Route('/supprimer', name: 'app_supprimer_classic')]
    public function supprimerClassic(ArticleRepository $articleRepository, EntityManagerInterface $em): Response
    {
        // 1. On va chercher l'article à supprimer en BDD
        $article = $articleRepository->find(5);

        // 2. On demande à l'EntityManager de préparer la suppression
        $em->remove($article);

        // 3. On envoie la requête SQL DELETE à MariaDB
        $em->flush();

        return new Response('L\'article 5 a été supprimé avec succès !');
    }

Explication de la méthode 1

  • $articleRepository->find(5) : On récupère l'objet.
  • $em->remove($article) : C'est la nouveauté ! Cette méthode dit à l'EntityManager de préparer la ligne à supprimer. À cette ligne précise, l'article existe encore dans MariaDB.
  • $em->flush() : On supprime.

Méthode 2 (supprimer une donnée) : la méthode automatique

Vous commencez à connaître la puissance de Symfony ! Nous pouvons utiliser un paramètre dynamique {id} dans l'URL pour que Symfony s'occupe de toute la partie recherche et sécurité à notre place.

Le code de la méthode automatique

#[Route('/supprimer/{id}', name: 'app_supprimer_magic')]
    public function supprimerMagic(Article $article, EntityManagerInterface $em): Response
    {
        // Symfony a intercepté l'{id} dans l'URL et a récupéré l'objet $article en coulisses.
        
        $em->remove($article);
        $em->flush();

        return new Response('L\'article a été supprimé via la méthode magique !');
    }

Si vous tapez localhost:8000/supprimer/6 dans votre navigateur, l'article avec l'ID 6 sera instantanément supprimé de votre table MariaDB.

Et voilà ! 😉

Dans la prochaine leçon, nous verrons comment afficher proprement l'ensemble de nos données dans un template Twig !