2015-07-09 16 views
6

Ho i seguenti modelli; Brand, Image e Image_size. Il marchio ha un'immagine e l'immagine ha molte dimensioni dell'immagine. Tutti questi modelli utilizzano eliminazioni software e l'aspetto dell'eliminazione è corretto. Tuttavia, se poi volessi ripristinare un marchio che è stato cancellato, ho anche bisogno di ripristinare i modelli immagine e image_size correlati.Laravel 5: come recuperare i modelli correlati cancellati?

Ho cercato di utilizzare gli eventi del modello in modo che quando il mio modello di Brand viene ripristinato, posso ottenere l'immagine e ripristinarla, e quindi avrò un evento simile nel modello dell'immagine per ottenere le dimensioni dell'immagine e ripristina quelli Sto lottando per ottenere il record di immagine cancellato però per il marchio. Questo è ciò che ho sto cercando di fare nel mio modello Marca:

/** 
* Model events 
*/ 
protected static function boot() { 
    parent::boot(); 

    /** 
    * Logic to run before delete 
    */ 
    static::deleting(function($brand) { 
     $brand->image->delete(); 
    }); 

    /** 
    * Logic to run before restore 
    */ 
    static::restoring(function($brand) { 
     $brand = Brand::withTrashed()->with('image')->find($brand->id); 
     $brand->image->restore(); 
    }); 
} 

ottengo solo il seguente messaggio di errore sulla linea che cerca di ripristinare l'immagine:

Call to a member function restore() on a non-object 

risposta

4

Nel codice si disabilitare il vincolo di eliminazione soft sulla query che recupera il marchio, non l'immagine. Provare quanto segue:

static::restoring(function($brand) { 
    $brand->image()->withTrashed()->first()->restore(); 
}); 

prega di notare che non v'è alcuna necessità di prendere l'oggetto $ marchio come è passato alla callback ripristino automatico.