Como aliviar seus controllers com os eventos do Eloquent no Laravel \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 13 Horas 

 36 Min 

 03 Seg 

   Tempo restante da oferta: 13 36 03 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Como aliviar seus controllers com os eventos do Eloquent no Laravel  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Como aliviar seus controllers com os eventos do Eloquent no Laravel

 Aprenda como os eventos do Eloquent podem te ajudar a diminuir a quantidade de lógica nos controllers de suas aplicações Laravel.

 [ Elton Fonseca ](https://www.treinaweb.com.br/blog/autor/elton-fonseca) 9 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/01/15145930/como-aliviar-seus-controllers-com-os-eventos-eloquent-no-laravel.png)  

O sonho de todo programador é desenvolver código limpo, organizado, legível, manutenível e muitos outros adjetivos que poderia colocar em uma lista enorme. O [Laravel](https://www.treinaweb.com.br/blog/o-que-e-laravel/ "Laravel") possui vários recursos que nos ajuda a organizar nosso código para conseguir alcançar alguns desses atributos que descrevi acima, se usados de maneira correta. Um desses recursos são os eventos do [Eloquent](https://www.treinaweb.com.br/blog/tag/eloquent/ "Eloquent").

Esses eventos são executados sempre que uma ação acontece no model. Isso possibilita removermos responsabilidade dos controllers e executar quando o evento for acionado, com isso, conseguimos um controller mais simples e organizado.

O Eloquent disponibiliza os eventos:

- Retrieved
- Creating e Created
- Updating e Updated
- Saving e Saved
- Deleting e Deleted
- Restoring e Restored

Os eventos com final `ing` são executados antes da ação no banco de dados e os eventos com final `ed` são executados após a ação no banco de dados.

[  ![Laravel - Eloquent ORM Avançado](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/laravel.svg)   Curso Laravel - Eloquent ORM Avançado Conhecer o curso ](https://www.treinaweb.com.br/curso/laravel-eloquent-orm-avancado)

## Relacionando os eventos no Model

É possível relacionar um evento do Eloquent a um método que fará a ação de três modos diferentes.

### Via o método boot

O primeiro modo que podemos adicionar uma ação em um evento do model é através do método estático boot. Por exemplo, para executar uma ação antes da criação podemos fazer:

```php
protected static function boot()
{
    parent::boot();

    static::creating(function ($nomeDoModel) {
        //Ação a ser executada 
    });

}

```

O Eloquent sempre injeta uma instância do model automaticamente no evento. Nos eventos executados antes da ação no banco é possível alterar os valores do model que serão persistidos.

A utilização dos eventos dentro do próprio model pode não ser a mais aconselhável, pois dependendo da quantidade de eventos pode sobrecarregar, tirando a complexidade dos controllers e transferindo para o models, o que não é bom, pois a solução de um problema criaria outro.

### Via classe de evento

Um modo mais limpo de executar os eventos do Eloquent é através de classes específicas para cada um dos eventos. Para isso, basta declarar no model uma propriedade chamada `dispatchesEvents` com um array contendo o nome do evento e a respectiva classe que será responsável por executar a ação:

```php
protected $dispatchesEvents = [
        'creating' => NomeDoModelCreating::class,
        'deleting' => NomeDoModelDeleting::class,
    ];

```

[  ![Laravel - Testes Avançado](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/laravel.svg)   Curso Laravel - Testes Avançado Conhecer o curso ](https://www.treinaweb.com.br/curso/laravel-testes-avancado)

### Via Observer

Na minha opinião, esse é o modo mais prático de executar ações quando precisamos executar ações em vários eventos do mesmo model.

Essa abordagem consiste basicamente em criar uma classe e declarar métodos públicos com o mesmo nome dos eventos, com isso, o próprio Eloquent verifica se o método existe, se sim, ele executa.

```php
