[AJUDA] Laravel transactions
Gostaria de saber por que a reversão não funciona? Pelo que entendi, o usuário só deveria ser criado se não houvesse erro. Mas meu código atual cria o usuário mesmo que dê o erro simulado, alguém poderia me ajudar?
public function Teste() {
DB::beginTransaction();
try {
$Cliente = Cliente::create([
'Nome' => 'Teste',
'Email' => 'teste@teste.com',
'CPF' => '12345678901',
'Telefone' => '11999999999',
'Data_de_Nascimento' => '1990-01-01',
'Verificado' => true
]);
throw new \Exception('Erro simulado');
DB::commit();
return 'Transação bem-sucedida';
} catch (\Exception $e) {
DB::rollBack();
return 'Erro na transação: ' . $e->getMessage();
}
}
Não responde a sua pergunta mas sugiro que não use beginTransaction
.
Se em algum momento você esquecer o commit ou o rollback seu banco vai ficar inconsistente.
DB::transaction(function () {
/// code
}, 5);
Dessa forma o commit e rollback são feitos automaticamente
Entendi, obrigado! Você não saberia dizer o porque não funciona de forma alguma a minha transaction?
Não, deveria estar funcionando
se bem me lembro, os inserts são auto-commited no banco. tente criar um usuário, alterar alguma propriedade, salvar e estourar o erro pra ver se da o rollback.
tentei aqui e o rollback não funciona
o banco que vc está usando tem suporte a transações?
Estou usando o postgres, pelo o que eu pesquisei ele suporta sim