0

Laravel 4.2 プロジェクトに問題があります。私はモデルと関係を持つPhotoモデルを持っています。ServiceService hasMany Photos

写真(ファイル)はpublic/upload/ディレクトリに保存されます。delete()写真を削除すると(のメソッド)、ファイルはサーバーから削除されます (以下のコード) が、Photo削除するとService(のメソッド) のデータベース エントリとそのすべての写真 (DB レコード) は削除されますが、トリガーしてもファイルは削除されません。delete()ServiceService$this->photos()->delete();

メソッドに配置Log::debug('photos->delete() fired');し、Photo->delete()直接呼び出すと起動し、経由で起動しようとするとService->delete()ログエントリがありません。なぜこのように動作するのかわかりません。誰でも助けることができますか?

これは私のコードですService:

 public function photos()
 {
    return $this->hasMany('Photo');
 }
 public function delete()
 { 
    $this->photos()->delete();
    parent::delete();
 }

そしてPhoto

public function delete()
{
    Log::debug('photos->delete() fired');
    $file = public_path().'/upload/'.$this->filename;
    if(File::isFile($file)){
       File::delete($file);
    }
    parent::delete();
}
4

3 に答える 3

3

まずoverloaddelete()メソッドは必要ありません。

DB で Service と Photo の関係を作成し、onDelete をカスケードします。

ファイルを削除するには、Photo モデルにイベント リスナーを追加します。

class Photo extends Eloquent {


public static function boot()
{
    parent::boot();

    Photo::deleted(function($photo){
         $file = public_path().'/upload/'.$photo->filename;
         if(File::isFile($file)){
              File::delete($file);
         }
    });
}

}

于 2016-08-20T19:45:31.280 に答える
1

モデルでイベントを削除するためのオブザーバーパターンを作成できます このリンクを参照してください

于 2016-08-20T19:45:02.473 に答える