Php Laravel删除方式:如何删除相关文件
我对我的Laravel4.2项目有一些问题。 我有一个Php Laravel删除方式:如何删除相关文件,php,laravel,laravel-4.2,Php,Laravel,Laravel 4.2,我对我的Laravel4.2项目有一些问题。 我有一个照片模型和一个服务模型与关系服务有很多照片 照片(文件)存储在public/upload/目录中。 当我删除照片时(方法delete()在photo中),文件将从服务器上删除(代码如下所示),但当我删除服务时(方法delete()在Service中),则删除服务及其所有照片的数据库条目(数据库记录)当我触发$this->photos()->delete()时,文件被删除,但文件不是偶数 我放置了Log::debug('photos->dele
照片
模型和一个服务
模型与关系服务有很多照片
照片(文件)存储在public/upload/
目录中。
当我删除照片时(方法delete()
在photo
中),文件将从服务器上删除(代码如下所示),但当我删除服务时(方法delete()
在Service
中),则删除服务及其所有照片的数据库条目(数据库记录)当我触发$this->photos()->delete()时,文件被删除,但文件不是偶数代码>
我放置了Log::debug('photos->delete())
在Photo->delete()
方法中,如果我直接调用它,它将被激发,并且当我尝试通过Service->delete()
启动它时,没有日志条目。
我不知道为什么会这样。有人能帮忙吗
这是我的代码服务
:
public function photos()
{
return $this->hasMany('Photo');
}
public function delete()
{
$this->photos()->delete();
parent::delete();
}
和照片
:
public function delete()
{
Log::debug('photos->delete() fired');
$file = public_path().'/upload/'.$this->filename;
if(File::isFile($file)){
File::delete($file);
}
parent::delete();
}
您可以创建用于删除模型refer this中事件的观察者模式。您可以创建用于删除模型refer this中事件的观察者模式。首先,无需重载方法
在数据库中,建立服务和照片之间的关系,以及onDelete级联
要删除文件,请向照片模型添加事件侦听器:
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);
}
});
}
}首先,无需重载delete()方法
在数据库中,建立服务和照片之间的关系,以及onDelete级联
要删除文件,请向照片模型添加事件侦听器:
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);
}
});
}
}我无法更改数据库架构,因此无法设置删除级联。在我测试时,如果不更改数据库,您的解决方案将无法工作。Thanx无论如何,我为文件删除部分提供的解决方案不依赖于数据库更改。我无法更改数据库架构,因此无法设置onDelete cascade
。在我测试时,如果不更改数据库,您的解决方案将无法工作。Thanx无论如何,我为文件删除部分提供的解决方案不依赖于数据库更改。如果我直接删除模型,它可以工作。Photo->delete()
,但是当它通过Service()
启动时($this->photos()->delete()
),它根本不会运行。如果我直接删除模型,它就可以工作。Photo->delete()
但是当它通过服务()
($this->photos()->delete()
)启动时,它根本不会运行。