Tester si une entitée Doctrine a été modifiée
Publié le 18/12/2020 • Mis à jour le 18/12/2020
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;
use Doctrine\ORM\UnitOfWork;
/**
* 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();
if (!$uow instanceof UnitOfWork) {
throw new \RuntimeException('Houston, We Have a Problem. 💥');
}
$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