Приветствую, ребята!
Что то застрял с , казалось бы, простой задачей - несколько операций по модификации данных в разных таблицах обернуть в транзакцию.
В том же Laravel есть вариант просто обернуть несколько вызовов методов сервисов ничего в них не передавая дополнительно и они будет объединены в одну транзакцию:
DB::transaction(function() use ($validated) {
// И тут любые действия совершаем,
// они автоматически обернутся
// в одну транзакцию. Например:
$user = User::create($validated);
$this->createDefaultPreferences($user);
$keys = ExternalService::getKeysForUser($user->id);
$user->keys()->create([ 'keys' => $keys ]);
});
Мне подсказали, как в Symfony можно использовать транзакции при работе с сущностями, но этот вариант требует рефакторинга кода, в том числе, и вендоровского:
$em->getConnection()->beginTransaction(); // suspend auto-commit
try {
$user = new User; $user->setName('A');
$em->persist($user); $em->flush();
$em->getConnection()->commit();
} catch (Exception $e) {
$em->getConnection()->rollBack();
throw $e;
}
Подскажите, пожалуйста, возможно ли сделать в Symfony по варианту "как в Laravel" и где можно узнать больше о транзакциях в Symfony (в доке
https://symfony.com/doc/current/index.html был и тут ничего по ключевому слову полезного не обнаружил)?