J'ai deux modules distincts qui peuvent être utilisés indépendamment, mais Module2 dépend de Module1.Besoin d'aide pour les opérations atomiques imbriquées impliquant des transactions PDO
Le module 2 a une opération qui doit être atomique, et il appelle une opération dans Module1 qui doit également être atomique.
En supposant que j'ai mis PDO :: ATTR_ERRMODE à AOP: ERRMODE_EXCEPTION, le code suivant fortement génériqué et snipped cède ceci: PHP Fatal error: Uncaught exception 'PDOException' message 'Il existe déjà une transaction active'
Module1:
<?php
class Module1
{
...
public function atomicOperation($stuff)
{
$this->pdo->beginTransaction();
try {
$stmt = $this->pdo->prepare(...);
...
$this->pdo->commit();
}
catch (Exception $ex) {
$this->pdo->rollBack();
throw $ex;
}
}
}
Module2:
<?php
class Module2
{
public $module1;
...
public function atomicOperation($stuff)
{
$this->pdo->beginTransaction();
try {
$stmt = $this->pdo->prepare(...);
...
$this->module1->atomicOperation($stuff);
...
$this->pdo->commit();
}
catch (Exception $ex) {
$this->pdo->rollBack();
throw $ex;
}
}
}
Je ne suis pas sûr que la meilleure façon d'aller à ce sujet - l'opération imbriquée sera appelée de manière indépendante et absolument doit être être atomique lorsqu'elle est appelée de son propre chef. Placer aux utilisateurs de la classe la responsabilité de gérer la transaction et de préserver l'atomicité n'est pas souhaitable, car je suis certain que les utilisateurs de la classe ne l'appliqueront jamais.
Ajout de quelques peluches. Vos opérations atomiques seront en mesure d'utiliser les transactions seules ou avec des amis autour d'eux. – Arkh