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

Publié le 18/12/2020 • Actualisé 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);

namespace App\Controller\Snippet;

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

/**
 * 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
 * @property EntityManagerInterface $entityManager
 */
trait Snippet124Trait
{
    public function snippet124(): void
    {
        $uow = $this->entityManager->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

  Travaillez avec moi !