микрозаймы онлайн займы на карту займы по паспорту

Automatizando ações no Model. 8

Recentemente precisei inserir nos registros ao Salvar o usuário da Ação. Ao analisar minha aplicação, eu teria que alterar todos os métodos onde era executado a função save() do Model em meus controllers, adicionando essa “Ação” a mais em todos eles.

Então encontrei uma forma, que para mim pareceu mais simples e limpa. Nunca havia utilizando “Model Events” anteriormente, então abaixo segue o Modelo que utilizei para automatizar essa tarefa, aceito sugestões para melhorar essa etapa em meus projetos caso alguém tenha.

Suas tabelas que irão utilizar o recurso, devem possuir as colunas: created_by e updated_by.

1 – O primeiro passo é criar um Model Base estendendo o Eloquent, para adicionarmos a funcionalidade que será replicada aos restantes.

<?php
//app/model/BaseModel.php
class BaseModel extends Eloquent{
    
     public static function boot()
     {
        parent::boot();
        static::creating(function($model)
        {
            $user = Auth::user();            
            $model->created_by = $user->id;
            $model->updated_by = $user->id;
        });
        static::updating(function($model)
        {
            $user = Auth::user();
            $model->updated_by = $user->id;
        });        
    }
    
}

2 – E ao Criarmos os nossos Models estendemos o “BaseModel” e adicionamos o método boot() com uma chamada ao método da Classe herdada com parent::boot().

<?php
//app/models/Aspect.php
class Aspecto extends BaseModel {
    
    protected $guarded = array();
    
    public static $rules = array(
                    		'descricao' => 'required|max:255',
                    		'perspectivas_id' => 'required'
                    	);

    public static $messages = array(
                    'descricao.max'            => 'O campo Descrição deve ser menor que 255 caracteres.',
            	    'descricao.required'       => 'O campo Descrição é de preenchimento obrigatório.',
            	    'perspectivas_id.required' => 'O campo Perspectiva deve ter uma opção válida selecionada.',
            	   );

    
    public static function boot()
    {
        //Aqui você ativa o uso do BaseModel
        parent::boot();
    }

    public function perspectivas()
    {
        return $this->BelongsTo('Perspectiva','perspectivas_id');
    }
    
}

Fontes:
http://driesvints.com/blog/using-laravel-4-model-events
http://laravel.com/docs/eloquent#model-events

Qualquer dúvida, estou a disposição.
https://plus.google.com/u/0/112101739663216187961/posts
https://www.facebook.com/flavio.h.ferreira
ou me envie um email no GMAIL

  • Legal!! Tentei fazer quase a mesma coisa um tempo atras, seguindo o mesmo tutorial… mas travei na hora de fazer boot em Aspecto q faz boot no Base q faz boot no Eloquent :D. Deixei para testar depois e nunca mais voltei. Agora vou :)

    Obrigada

    • fhferreira

      Vlw Elena 😀

  • Guilherme Ribeiro

    Parabéns Flávio, foi muito claro e objetivo. Me ajudou muito!

    • fhferreira

      Vlw Guiherme.

  • Diego Felix

    Muito Bom Flávio!

    • fhferreira

      Vlw Diego.

  • Pingback: Automatizando ações no Model. | devphp.in()

  • Thiago Moreira

    Era exatamente isso que eu tinha em mente, você foi simples e objetivo, obrigado Flávio.