2016-12-12 3 views
1

にある画像を、私は1で、多くの関係にある二つのモデルを持っているを削除します。これらの写真に関連するツアーが削除されると、フォルダからのこれらの写真が削除されます。これらの写真はelequent関係

これは私が何をしようとしたものです(パブリック/画像/スライド)にIDを配置されています

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のでコレクションですコレクションの1つのプロパティにアクセスすることはできません。

あなたがループ

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

を実行する必要がある。しかしブート方法

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

そして、あなたのPhoto Model (Photo.php)同様

上を作成 Tour Model (Tour.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

Noneを削除しない場合、それはどちらの方法で動作しますこの方法です。 –

+0

@ZacharyDaleあなたのコードモデル/コントローラー(pastebinのようなもの)と '$ photo-> path'の一例をコピーします – Froxz

+0

'/images/slides/7212637200_ba233060a3_o.jpg'が保存されていることに気付きました私のdb columの 'path'にあります。私のコードを 'foreach($ photo-> photos()$ photo)に変更しました。 { File :: delete(public_path($ photo-> path)); } 'でも、画像を削除していません。 –