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
A vous de jouer !
Ces articles vous ont été utiles ? Vous pouvez m'aider à votre tour de plusieurs manières : (cliquez sur le lien "reply" dans à droite pour me contacter )
- Me remonter des erreurs ou typos.
- Me remonter des choses qui pourraient être améliorées.
- Aimez et repostez !
- Suivez moi sur Bluesky 🦋
- Inscrivez-vous au flux RSS.
- Cliquez sur les boutons Plus sur Stackoverflow pour me faire gagner des badges "annonceur" 🏅.
Merci et à très bientôt sur Strangebuzz ! 😉
