Laravel SoftDeletes – Deletando de forma segura

Deletar dados em um banco de dados cheio de chaves estrangeiras pode ser uma grande dor de cabeça, alguns programadores bloqueiam esse tipo de ação fazendo com que o sistema muitas vezes fique cheio de lixo, e outros fazem a maneira correta de criar uma flag informando se aquele dado foi deletado ou não.
Pensando em facilitar mais ainda, o Laravel possui uma funcionalidade no Eloquent que já faz esse trabalho.

Para que o laravel trabalhe com remoção segura de dados, vamos adicionar um campo de data na tabela, esse campo vai informar o momento que aquele dado foi deletado, e o eloquent vai retornar apenas as informações que precisamos quando usamos os seus métodos.

Para adicionar esse campo, na nossa migration usamos o comando:

$table->softDeletes();

Esse comando deve adicionar na tabela o campo “deleted_at” do tipo timestamp.

Agora, tudo que temos que fazer é ir no Model dessa tabela e adicionar a trait SoftDeletes;

// Namespace:  Illuminate\Database\Eloquent\SoftDeletes;
use SoftDeletes;

Pronto! Agora sempre que usarmos o método “delete()” do Eloquent para deletar nossos registros, o laravel vai marcar esses dados com a data de remoção, e quando usarmos métodos de busca como o find(), get(), all() e outros, ele não deve retornar os dados marcados como removidos.

Se quisermos visualizar dados que foram removidos temos que adicionar o método “withTrashed()” ou “onlyTrashed()”


// Se a linha com id 1 for uma linha deletada, ele não retorna nada
$linha = Linha::find(1); 

// Retorna o registro com ID 1 mesmo que ele tenha sido deletado antes
$linha = Linha::withTrashed()->find(1);

// Retorna o registro com ID 1 apenas se ele tiver sido deletado antes
$linha = Linha::onlyTrashed()->find(1);


// Para retornar o campo deletado, usamos o método restore
$linha->restore();

Mais informações:
https://laravel.com/docs/5.4/eloquent#soft-deleting

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *