У меня есть проект, в котором мне нужно сделать транзакцию, потому что у меня есть 3 сущности, которые зависят друг от друга. Арендатор, Организация, Пользователь. Сначала я начал с одной транзакции в одном из репозиториев, а затем узнал о doctrine вложенных транзакциях. Я не совсем понял их роль в doctrine и каковы варианты использования. Можете ли вы объяснить мне более подробно, чем их документацию, каковы варианты использования и применимо ли это к моему случаю?
В моем случае пользователю требуется идентификатор организации, идентификатор арендатора и организация требует идентификатор арендатора. Если при создании одна из сущностей выходит из строя по какому-либо мотиву, она должна завершиться неудачей всех трех и выполнить откат.
LE: Я использую doctrine с symfony.
Пример из документации вложенная транзакция:
<?php
// $conn instanceof Doctrine\DBAL\Connection
$conn->beginTransaction(); // 0 => 1, "real" transaction started
try {
...
// nested transaction block, this might be in some other API/library code that is
// unaware of the outer transaction.
$conn->beginTransaction(); // 1 => 2
try {
...
$conn->commit(); // 2 => 1
} catch (\Exception $e) {
$conn->rollBack(); // 2 => 1, transaction marked for rollback only
throw $e;
}
...
$conn->commit(); // 1 => 0, "real" transaction committed
} catch (\Exception $e) {
$conn->rollBack(); // 1 => 0, "real" transaction rollback
throw $e;
}