2013-02-15 7 views
5

Sono nuovo di Laravel e ORM in generale. Come posso collegare Eloquent al codice di attivazione prima e dopo il salvataggio di un modello? So che posso fare quanto segue per modelli specifici, ma sto cercando di capire come farlo per ogni modello.laravel hook in Eloquent pre e post save per ogni modello

class Page extends Eloquent { 

    public function save() 
    { 
     // before save code 
     parent::save(); 
     // after save code 
    } 
} 
+0

vuoi che un salvataggio gancio che è esiste per tutti i modelli estesi da eloquenti? – Bilal

risposta

3

È possibile creare una classe che si estende BaseModel eloquente e quindi avere tutti i vostri modelli si estendono BaseModel. Ecco un esempio:

+0

questa è una buona idea. Grazie – David

11

C'è persino un modo migliore per realizzare questo! Creare un osservatore per, diciamo un modello chiamato House:

class HouseObserver { 

    public function saving(House $house) { 
     // Code before save 
    } 

    public function saved(House $house) { 
     // Code after save 
    } 

} 

ora registrare l'osservatore con il modello House aggiungendo la riga House::observe(new HouseObserver) somehwere. La linea può essere aggiunto nel metodo di avvio del modello:

class House extends Eloquent { 

    // Lots of model code 

    public static function boot() { 
     parent::boot(); 
     self::observe(new HouseObserver); 
    } 

} 

Maggiori informazioni si possono trovare here.

1

Utilizzando modelli laravel propri eventi del ciclo di vita possono risolvere questo semplice

/** 
* model life cycle event listeners 
*/ 
public static function boot(){ 
    parent::boot(); 

    static::creating(function ($instance){ 
     // 
    }); 

    static::created(function ($instance){ 
     // 
    }); 
} 
Problemi correlati