2016-12-12 4 views
1

у меня есть две модели, которые находятся в одном для многих отношениях:Удалите изображения, которые находятся в elequent отношениях

Tour.php

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

Photo.php

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

Я хочу удалить эти фотографии из папки, когда тур, связанный с этими фотографиями, удаляется. Эти фотографии расположены идентификатор в (общественных/изображений/слайдов)

Это то, что я пытался сделать:

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'); 
} 

И я получил ошибку:

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

ответ

0

Поскольку $tour->photos коллекция , и вы не можете получить доступ к одному свойству в коллекции.

Вам необходимо запустить цикл

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

Но я бы с другим способом

On You Tour Model (Tour.php) создать метод загрузки

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

И на ваш Photo Model (Photo.php) а

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

Подумайте об этом как о цепочке, когда вы удалите Tour, это приведет к удалению для Photos при удалении Photos файлов.

Таким образом, он работает как способ, если вы удалите Tour или сохранить Tour и не удалить только Photo

+0

Ни один из них выше сделал работу и не вернулся какой-либо ошибки. –

+0

@ ZacharyDale, то что-то не так, скопируйте где-нибудь свою модель кода/контроллер (например, pastebin или что-то еще), а также один пример '$ photo-> path' – Froxz

+0

Я понял, что'/images/slides/7212637200_ba233060a3_o.jpg' сохраняется в моем db colum 'path'. Я изменил свой код на 'foreach ($ tour-> photos() как $ photo) { Файл :: delete (public_path ($ photo-> path)); } ', но это также не удаляет изображение. –

 Смежные вопросы

  • Нет связанных вопросов^_^