Symfony/Doctrine— Imbriquer des transactions SQL

  1. Une transaction parente permettant de modifier simultanément tout un groupe d’User (et de rollback simultanément toutes les modifications de tous les Users modifiés en cas d’erreur). Cette transaction parente contiendra plusieurs fois la transaction enfants (une pour chaque User modifié).

Modification unitaire d’une entité

Commençons par créer un Controller de démo qui nous servira dans un premier temps à lister les Users puis à les modifier par la suite.

$this->em->getConnection()->beginTransaction();
$this->em->getConnection()->commit();
$this->em->getConnection()->rollBack();

Modification simultanées de plusieurs entités

Maintenant que la première transaction est réalisée, nous allons réutiliser la méthode updateUserName() dans une nouvelle méthode qui va permettre de modifier plusieurs utilisateurs simultanément.

$this->em->getConnection()->setNestTransactionsWithSavepoints(true);
$this->em->getConnection()->getTransactionNestingLevel();

Un dernier avertissement

Attention tout de même avec l’imbrication de transaction. Savoir quelle transaction sera ou ne serra pas “commitée” peu vite devenir un casse tête.

--

--

Lead Développeur PHP/Symfony, Chargé de recrutement technique

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
NicolasFz.code

NicolasFz.code

Lead Développeur PHP/Symfony, Chargé de recrutement technique