DEV Community

Cover image for Você sabe o que é "softdelete"? Parte 3
policarpo
policarpo

Posted on • Updated on

Você sabe o que é "softdelete"? Parte 3

Na primeira parte deste artigo, criamos o projeto, os métodos para listar registros e as respectivas rotas.

Na segunda parte, adicionamos os métodos para deletar, restaurar e consultar modelos deletados.

Nesta terceira e última parte veremos como remover de forma definitiva um registro do banco de dados.


Removendo registros permanentemente

Seguindo a mesma abordagem feita nas duas primeiras partes, vamos criar um método na controller...

public function forceDeleteInvoiceById($id)
{
    $invoice = Invoice::withTrashed()->find($id);

    if ($invoice) {
        $invoice->forceDelete();
        return response()->json(['message' => 'Invoice '.$id.' permanently deleted']);
    } else {
        return response(['message' => 'Invoice not found'], 404);
    }
}

Enter fullscreen mode Exit fullscreen mode

...e em seguida a respectiva rota.

Route::delete('/{id}/forcedelete', 'forceDeleteInvoiceById');

Enter fullscreen mode Exit fullscreen mode

Repare que instruímos o querybuilder a incluir registros deletados na consulta através o método withTrashed().

E acessando a rota passando um registro para deleção definitiva temos o seguinte resultado:

Request to force delete invoice by id

De acordo com a documentação oficial é possível agendar a exclusão definitiva de registros marcados como deletados fazendo uso de agendamento configurado na classe App\Console\Kernel.php.

Entretanto não abordaremos esta técnica neste artigo.


Conclusão

Se você chegou até aqui meu muito obrigado.
Espero que o projeto possa ajudá-lo de alguma forma, seja com conhecimento ou ideias para solucionar problemas do dia a dia.


Extensões utilizadas

Em desenvolvimento web, uma boa ferramenta para testar requisições api faz toda diferença.
Por isso deixo aqui o link para a extensão para VSCode Thunder RESTClient.
Na minha opinião não deixa nada a desejar para outras ferramentas pagas.
https://marketplace.visualstudio.com/items?itemName=rangav.vscode-thunder-client


Já para aplicações Laravel, a extensão Laravel Extra Intellisense ajuda muito na inclusão automática de referências.
https://marketplace.visualstudio.com/items?itemName=amiralizadeh9480.laravel-extra-intellisense


Repositório público

O projeto está publicado no github e pode ser acessado através deste endereço
https://github.com/MarcioPolicarpo/laravel9-soft-delete

Discussion (0)