Laravel删除方法:如何删除相关文件

时间:2016-08-20 18:51:58

标签: php laravel laravel-4.2

我的Laravel 4.2项目存在一些问题。 我有一个Photo模型和一个Service模型,其关系为Service hasMany Photos

照片(文件)存储在public/upload/目录中。 当我删除照片(delete()中的方法Photo)时,文件将从服务器中删除(下面显示的代码),但是当我删除Servicedelete()中的方法Service }}} Service的数据库条目及其所有照片(数据库记录)被删除但是当我触发$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();
}

2 个答案:

答案 0 :(得分:2)

首先,不需要overload delete()方法。

在您的数据库中,建立服务和照片之间的关系,以及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);
         }
    });
}

}

答案 1 :(得分:1)

您可以创建观察者模式以删除模型中的事件,请参阅此link