2017-12-02 5 views
1

Ich möchte einen Benutzer löschen, und wenn dieser Benutzer einen Avatar hat, möchte ich den Avatar entweder entfernen. so dass ich wie folgt aus:Fehler beim Löschen von Bildern in Laravel, wenn kein Datensatz gefunden wurde

public function destroy($id) 
    { 
     $user = User::findOrFail($id); 
     if ($user && $user->profile->avatar){ 
      Storage::delete($user->profile->avatar); 
     } 

     User::destroy($id); 
     return back(); 
    } 

aber wenn ich dies tun, es gibt mir einen Fehler wie diese, wenn der Benutzer hat keine Aufzeichnung in avatar Tabellen:

"Trying to get property of non-object" 

so was mir machen bekommen diese Fehler und wie kann ich es beheben. Vielen Dank.

+0

'$ user-> Profile' könnte null sein ... versuchen, als ein Objekt null zu verwenden, würde diesen Fehler geben ... müssen Sie für NULL-Werte überprüfen – lagbox

+0

„Der Versuch, Eigentum von Nicht-Objekt zu erhalten "Bei welcher Zeilennummer? –

+0

Bei If. Ich denke es bei user-> profile, da der Benutzer keinen Avatar hat. – Ying

Antwort

2

Sie müssen zuerst überprüfen, ob der Benutzer ein Profil hat.

if ($user && $user->profile && $user->profile->avatar){ 
    Storage::delete($user->profile->avatar); 
} 

Wie auch immer, dies auf Modell-Ebene zu tun, macht Ihren Controller ein wenig sauberer. Beispiel für das direkte Anhängen eines Listeners durch das Modell.

class User extends Model 
{ 
    protected static function boot() 
    { 
     parent::boot(); 

     static::deleting(function ($instance) { 
      if ($instance->profile && $instance->profile->avatar) { 
       \Storage::delete($instance->profile->avatar); 
      } 
     }); 
    } 
} 
+0

Großartig arbeiten. Vielen Dank. – Ying

Verwandte Themen