Habilitando e usando soft deletes no Laravel 5.4

E vamos a mais um post sobre o Laravel, nesse post vou explicar o que é Soft delete e como usar e quando devemos realmente usá-lo. Então vamos lá!

O que são as Soft Deletes?

AS soft deletes marcam linhas do banco de dados como excluídas sem exclui-las realmente. Isso, nos permite inspeciona-las depois.

Quando eu devo usar soft deletes?

Mesmo que esse recurso seja muito interessante, isso não quer dizer que você deva usar em todos os seus modelos, porque além de inflar seu banco, sempre que usar algum gerenciador de banco de dados provavelmente você irá esquecer de olhar a coluna "deleted_at"(falaremos mais tarde dela).
Minha recomendação é realmente analisar seu projeto e ver quando realmente existe a necessidade de manter certos dados, como por exemplo, dados de usuários e comentários, em suma registros sensíveis e possam gerar auditorias.

Como habilitar o soft deletes

Para habilita-lo é muito simples basta seguir poucos passos. Para o nosso exemplo eu vou usar um model e tabela de nome Contato e contatos, então vamos aos exemplos!

Na sua migration é necessário que tenha a coluna de método "softDeletes();" você pode criar uma (para projetos já em andamento) ou adicionar a sua migration de contatos.
Schema::create('contatos', function (Blueprint $table) {
 $table->softDeletes();
});

Com isso basta rodar a migration para criarmos a coluna "deleted_at".

Com a coluna criada vamos fazer as seguintes alterações em nosso model: 
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Contato extends Model
{
 use SoftDeletes; // Usa o trait 
    
    protected $dates = ['deleted_at']; // marca a coluna como uma data 

}

Aqui adicionamos o trait SoftDeletes e o usamos, também marcamos a coluna deleted_at como uma data, caso ocorra de já existir essa variável, basta colocar uma vírgula e passar o parâmetro seguinte. Com isso já temos o nosso soft deletes funcionando, qualquer chamada que fizermos do destroy() ou delete() definirá a coluna deleted_at como sendo data e hora atual da execução em vez de excluir definitivamente a linha do banco de dados.

Um guia simples para usar trait em Laravel 5

Recentemente estive estudando como funciona a autenticação do Laravel 5.4 e sempre via "use RegistersUsers" que se relacionava a uma trait e não a uma classe e me perguntava, o que trait?

Consultando com o soft deletes

Agora que como acessar esses itens submetidos às soft deletes?

withTrashed()

Você pode exibir uma consulta com os itens excluídos com soft deletes:
$allDeletedContatos = Contato::withTrashed()->get();

trashed()

Caso queria saber se um contato foi excluído basta usar o método trashed();

$conato = Conato::withTrashed()->find('5');     
if($conato->trashed()){
 // faz alguma coisa
}

Nesse exemplo eu verifico se o contato de id 5 está excluído, (o withTrashed é necessário porque se não o usuário excluído não iria ser retornado);

onlyTrashed()

Também podemos obter somente os itens que tenham sido excluídos com o soft deletes:
$onlyDeletedContato= Contato::onlyTrashed()->get();

restore()

Restaurando entidades submetidas ao soft deletes. Se quiser restaurar um item excluído com uma soft deletes, podemos utilizar o restore() em uma instância ou consulta.
$contato= Contato::onlyTrashed()->find('4');
$contato->restore();

Isso fará com que o contato de ir 4 seja restaurado, podemos encadear de várias maneiras por exemplo:
Contato::onlyTrashed()->where('vip', true)->restore();

forceDelete()

Forçando a exclusão de entidades submetidas ao soft deletes. E possível excluir uma entidade submetida ao soft delete com uma chamada de forceDelete() em uma entidade ou consulta.
$contato = Contato::withTrashed()->find('3');
$contato->forceDelete();
// ou 
Contato::onlyTrashed()->forceDelete();

Podemos buscar por apenas um id e exclui-lo ou excluir definitivamente todos que foram excluídos pelo soft delete.

Conclusão

Esse post foi rápido e rasteiro! Abordei a maioria informações relacionadas a soft deletes, do que é até como usá-lo, qualquer dúvida ou correção comente aqui em baixo, se gostou desse post compartilha com seus amigos e de aquele like maroto!



E para não perder nenhuma novidade nos sigam nas redes sociais:
Twitter: @Bulfaitelo
Facebook: Bulfaitelo Project
Blogger: Bulfaitelo Project
Share on Google Plus

About Thiago Rodrigues

Formado em Sistema de Informação pela Faculdade Paraíso
O que falar de mim? Não á muito, mas garanto que meu objetivo aqui é somente ajudar!
Atualmente desenvolvendo o projeto do QiEstudo.

Comentários
0 Comentários

0 comentários:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.