Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Executar varais inserções no banco de dados, mas apenas se todas forem bem sucedidas

Tenho um projeto que recebe os dados do front e os salvam no banco de dados, só que as vezes dá erro no segundo create e os dados do primeiro já ficam salvo no banco de dados. Gostaria de saber se tem alguma maneira evitar a criação do primeiro elemento caso dê erro no segundo.

public function store(Request $request)  {

    Cliente::create($request->cliente);
    Pagamento::create($request->pagamento);

    return response()->json("Cliente cadastrado com sucesso!", 201);
}
1 resposta
solução!

Olá Felipe,

Você pode utilizar o que é chamado de database transaction.

Para utlizar isso com o Lumen/Laravel você pode fazer assim:

\DB::transaction(function () {
    // Tudo que estiver aqui só será realmente
    // salvo se nenhuma exceção ocorrer
    Cliente::create($request->cliente);
    Pagamento::create($request->pagamento);
});

Assim só será realmente salvo no banco se todas as ações ocorrerem sem erros, caso ocorra uma exceção o que foi gravado no banco durante a transaction é desfeito.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software