Tester si une entitée Doctrine a été modifiée
Publié le 18/12/2020 • Actualisé 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);
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