2016-12-12 2 views
1

Ich habe zwei Modelle, die in einer zu viele Beziehung sind:Bilder löschen, die in elequent Beziehung sind

Tour.php

public function photos() 
{ 
    return $this->hasMany('App\Photo'); 
} 

Photo.php

public function tour() 
{ 
    return $this->belongsTo('App\Tour'); 
} 

Ich möchte löschen Diese Fotos aus dem Ordner, wenn die Tour zu diesen Fotos gehört, werden gelöscht. Diese Fotos befinden ID in (public/images/Dias)

Das ist, was ich zu tun versucht:

public function destroy($id) 
{   
    $tour = Tour::find($id); 
    $tour->country()->detach(); 
    File::delete(public_path('/images/featured_image/'.$tour->featured_image)); 
    File::delete(public_path('/images/banner/'.$tour->banner)); 
    File::delete(public_path('/images/slides/'.$tour->photos->path)); 
    $tour->delete(); 

    Session::flash('success', 'The tour is sucessfully deleted.'); 
    return redirect()->route('tours.index'); 
} 

Und ich habe Fehler:

Undefined property: Illuminate\Database\Eloquent\Collection::$path 

Antwort

0

Da $tour->photos ist eine Sammlung und Sie können nicht auf eine Eigenschaft einer Sammlung zugreifen.

Sie benötigen eine Schleife

foreach($tour->photos() as $photo){ 
    File::delete(public_path($photo->path)); 
} 

Aber ich würde mit anderen Weise

gehen laufen auf Sie eine Boot-Methode erstellen Tour Model (Tour.php)

protected static function boot() { 
      parent::boot(); 
      static::deleting(function($tour) { 
      $tour->photos()->delete(); 
     }); 
    } 

Und auf Ihrem Photo Model (Photo.php) auch

protected static function boot() { 
      parent::boot(); 
      static::deleting(function($photo) { 
      if (File::exists(public_path($photo->path))) { 
        File::delete(public_path($photo->path)); 
       } 
      } 
     }); 
    } 

Betrachten Sie es als Kette, wenn Sie Tour löschen, löst dies das Löschen für Photos aus, wenn das Löschen von Photos Dateien ebenfalls gelöscht wird.

Auf diese Weise es beide so funktioniert, wenn Sie einen Tour löschen oder Sie Tour halten und nur Photo

+0

Keine von diesen über die Arbeit geleistet haben noch zurück einen Fehler löschen. –

+0

@ZacharyDale dann Ihr etwas falsch machen, kopieren Sie irgendwo Ihr Code Model/Controller (wie Pastebin oder etwas) und auch ein Beispiel für $ Foto-> Pfad – Froxz

+0

Ich erkannte, dass '/ images/slides/7212637200_ba233060a3_o.jpg' gespeichert ist in meinem db colum 'Pfad'. Ich habe meinen Code in 'foreach ($ tour-> photos() als $ photo) geändert. { File :: delete (public_path ($ photo-> path)); } 'aber das löscht das Bild auch nicht. –

Verwandte Themen