Bonjour à tous,
Je rencontre un problème avec la gestion des transactions avec Doctrine2 :
Voici mon code, disons qu'un truc est composé d'item:
En mode debug, j'arrive sur le breakpoint, je supprime en base la ligne correspondant à l'entity "truc", j'avance dans le debug, je rafraîchis l'entity avec la méthode refresh.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 class truc{ /** * @ORM\OneToMany(targetEntity="Item", mappedBy="item", cascade={"remove"}) */ private $items; } class Manager{ public function deleteItem($item){ $truc = $item->getTruc(); -->breakpoint<-- $this->entityManager->beginTransaction(); try{ $this->entityManager->lock($truc, \Doctrine\DBAL\LockMode::PESSIMISTIC_WRITE); $this->entityManager->refresh($truc); if($truc===null) throw .... }catch... } }
A ce moment, en toute logique, $truc devrait être null ou vide puisque la ligne en base a été supprimée. Et pourtant non !
Une exception SQL est ensuite levée pendant le flush (pas très jolie et pas assez explicite à mon goût).
Comment être sûr que l'entity est toujours présente en base de données ?
Merci d'avance
Piloo
Partager