DEV Community

Cover image for Você sabe o que é "softdelete"? Parte 2
Marcio Policarpo
Marcio Policarpo

Posted on • Edited on

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

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

Nesta segunda parte, vamos implementar os métodos para deletar, restaurar e consultar modelos deletados.


Deletando registros

O primeiro passo é editar a controller e incluindo o método para deleção de registros.

public function deleteInvoiceById($id)
{
    $invoice = Invoice::find($id);

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

Enter fullscreen mode Exit fullscreen mode

Explicando o código, primeiro verificamos se o registro existe e, se existir procedemos à deleção retornando uma mensagem personalizada.

Se não existir informamos que o registro não foi encontrado.

Em seguida adicionamos uma nova rota no arquivo '\route\api.php' para acessar o método criado na controller.

Route::delete('/{id}/delete', 'deleteInvoiceById');
Enter fullscreen mode Exit fullscreen mode

Agora vamos testar a aplicação fazendo uma requisição para rota que deleta o registro passado como parâmetro.

Se tudo estiver certo, veremos uma mensagem semelhante à esta logo abaixo.

Request to delete invoice by id

Acessando novamente a rota que traz todos os registros veremos algo parecido com isto:

Request to get all invoices

E acessando a rota para trazer um registro específico teremos o seguinte retorno:

Request to get invoice by id


Restaurando registros deletados

Continuando com o projeto iremos implementar agora um método para restaurar registros deletados...

public function restoreInvoiceById($id)
{
    $invoice = Invoice::onlyTrashed()->find($id);

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

Enter fullscreen mode Exit fullscreen mode

...e sua respectiva rota.

Route::put('/{id}/restore', 'restoreInvoiceById');

Enter fullscreen mode Exit fullscreen mode

Perceba a utilização do método onlyTrashed()cujo objetivo é garantir que apenas registros deletados possam ser encontrados.

Agora vamos testar a restauração do registro deletado.

Request to restore deleted invoice

Consultando todos os registros...

Request to get all invoices

...e consultando o registro pelo id temos:

Request to get invoice by id


Listando registros deletados

Para concluir a segunda parte deste artigo vamos criar o método que retorna um registro deletado pelo seu id...

public function getTrashedInvoiceById($id)
{
    $invoice = Invoice::onlyTrashed()->find($id);

        if ($invoice) {
            return $invoice;
        } else {
            return response()->json(['message' => 'Invoice not found'], 401);
        }
}

Enter fullscreen mode Exit fullscreen mode

...e sua respectiva rota:

Route::get('/{id}/trashed', 'getTrashedInvoiceById');

Enter fullscreen mode Exit fullscreen mode

Para testar este método acesse a rota que deleta registros qualquer id.

Logo após a deleção do registro basta acessar a rota que mostra registros deletados para obter o resultado abaixo.

Request to get invoice delete

Note que a propriedade "deleted_at" mostra a data e hora da exclusão desse registro.


Na terceira e última parte deste artigo vamos desenvolver o método que fará a exclusão definitiva dos modelos.

Até breve.

Top comments (0)