Blog EspecializaTi
Carlos Ferreira Por: Carlos Ferreira Comentar

Database Transactions no Laravel

Já passou por aquele cenário onde precisa inserir ao mesmo tempo em duas tabelas distintas? É muito comum!

Porém, vem aquela pergunta, e se algo dê errado pelo caminho? Ou seja, uma das operações de alguma das tabelas falhar, o que fazer?

Para resolver isso existe o DB Transaction do laravel, que permite fazer o commit ou dá um rollback de uma ou mais operações do banco de dados. Vamos ver na prática um cenário comum, temos uma tabela chamada users e outra chamada account. Em nossa lógica queremos que quando inserir um novo usuário automaticamente crie uma nova conta para mesmo na tabela account. Veja abaixo como fazer isso utilizando Database Transactions:

//Recupera os dados do formulário
$dataForm = $request->all();

DB::transaction(function () {
    $newUser = User::create($dataForm);

    Account::create([
        'user_id'     => $newUser->id,
        'number'     => uniqid(date('YmdHms')),
    ]);
});

Se algo de errado no momento de fazer as operações em alguma das tabelas Users ou Accounts automaticamente o laravel faz o rollback e desfaz deixando as informações no banco de dados no formato original.

 

Database Transactions Manual

Particularmente gosto muito de trabalhar neste formato aqui abaixo, acho mais simples e didático de trabalhar:

//Inicia o Database Transaction
DB::beginTransaction();

//Recupera os dados do formulário
$dataForm = $request->all();

$newUser = User::create($dataForm);

$newAccount = Account::create([
    'user_id'    => $newUser->id,
    'number'     => uniqid(date('YmdHis')),
]);

if( $newUser && $newAccount ) {
    //Sucesso!
    DB::commit();
} else {
    //Fail, desfaz as alterações no banco de dados
    DB::rollBack();
}

Espero ter esclarecido, qualquer dúvida deixe o seu comentário!

 

Abraços []’s

Carlos Ferreira

Sobre o Autor:

Carlos Ferreira

Carlos Ferreira é Analista de Sistemas Experiente, Empreendedor, Fundador da empresa EspecializaTi. Certificações: Comptia Linux +, LPI, Novell Certification.

Todos os direitos reservados © 2019 - EspecializaTi. É proibida a reprodução total ou parcial deste conteúdo.