2015-07-09 6 views
6

Mam następujące modele; Brand, Image i Image_size. Marka ma jeden obraz i obraz ma wiele rozmiarów obrazu. Wszystkie te modele używają delikatnych operacji usuwania, a usuwanie elementów jest w porządku. Jeśli jednak chciałbym przywrócić markę, która została usunięta, muszę również przywrócić powiązane obrazy i modele image_size.Laravel 5: Jak odzyskać usunięte powiązane modele?

Szukałem przy użyciu zdarzeń modelu, więc gdy przywrócony zostanie mój model marki, mogę uzyskać obraz i przywrócić go, a następnie będę mieć podobne wydarzenie w modelu obrazu, aby uzyskać rozmiary obrazu i przywrócić te. Staram się jednak o rejestrację usuniętego obrazu dla marki. To co mam, to staram się zrobić w moim modelu marki:

/** 
* 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(); 
    }); 
} 

Właśnie pojawia się następujący komunikat o błędzie na linii, która stara się odtworzyć obraz:

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

Odpowiedz

4

W kodzie masz wyłącz ograniczenie dla opcji miękkiego usunięcia w zapytaniu, które pobiera markę, a nie obraz. Spróbuj wykonać następujące czynności:

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

Należy pamiętać, że nie ma potrzeby, aby pobrać obiekt $ marki, jak to jest przekazywane do zwrotnego przywracając automatycznie.