Tester si une entitée Doctrine a été modifiée

Publié le 18/12/2020 • Mis à jour le 18/12/2020


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous allons voir comment tester si une entité Doctrine a été modifiée de son état initial de la base de données. Nous devons utiliser la fonction isEntityScheduled() de l'objet UnitOfWork Doctrine. Si vous voulez tester si une entité a déjà été enregistrée en base veuillez jeter un coup d'œil à ce snippet.
PS : Si vous appuyez sur le bouton "exécuter", vous verrez en bas à gauche que l'auteur du snippet est "Webby" et pas "COil" comme ça devrait être puisque nous venons de modifier la valeur de ce champ à l'exécution.


<?php

declare(strict_types=1);

// src/Controller/Snippet/Snippet124Trait.php

namespace App\Controller\Snippet;

use App\Repository\ArticleRepository;
use Doctrine\ORM\EntityManager;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 *
 * @property ArticleRepository $articleRepo
 */
trait Snippet124Trait
{
    public function snippet124(): void
    {
        $manager = $this->getDoctrine()->getManager();
        if (!$manager instanceof EntityManager) {
            throw new \RuntimeException('Houston, We Have a Problem. 💥');
        }

        $uow = $manager->getUnitOfWork();
        $article = $this->articleRepo->findById(124); // this snippet
        var_dump($uow->isEntityScheduled($article));

        // Now modify the article with dummy data
        $article->setAuthor('Webby');
        $uow->computeChangeSets();
        var_dump($uow->isEntityScheduled($article)); // should return true now

        // That's it! 😁
    }
}

 Exécuter le snippet  Plus sur Stackoverflow  Snippet aléatoire