我的Laravel 4.2项目存在一些问题。
我有一个Photo
模型和一个Service
模型,其关系为Service hasMany Photos
。
照片(文件)存储在public/upload/
目录中。
当我删除照片(delete()
中的方法Photo
)时,文件将从服务器中删除(下面显示的代码),但是当我删除Service
时delete()
中的方法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();
}
答案 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