我的项目中有 2 个 Eloquent 模型:App\StoredFile
and App\StoredImageSize
.
The StoredFile
模型负责保存上传的文件信息。如果上传的文件是图像,则 2 个缩略图将存储在存储中,它们的属性存储在 DB 中(StoredImageSize
model).
关系如下:
存储文件.php:
public function sizes()
{
return $this->hasMany('App\StoredImageSize');
}
存储图像大小.php:
public function originalImage()
{
return $this->belongTo('App\StoredFile');
}
StoredImageSize
有一个观察者类(StoredImageSizeObserver
)已通过服务提供商注册并且运行良好。
问题是我想在从数据库中删除后续行时从存储(在我的例子中是硬盘)中删除实际文件。
StoredImageSizeObserver.php:
public function deleting(StoredImageSize $file)
{
Storage::delete($file->server_url);
}
逻辑是这样的:
$file = StoredFile::find(1);
$file->sizes()->delete(); // it does delete all related rows from 'StoredImageSize' but not files from storage
$file->delete()
实际上它从来没有击中deleting
方法来自StoredImageSizeObserver
类为Laravel 文档 https://laravel.com/docs/5.4/eloquent#deleting-models says:
通过 Eloquent 执行批量删除语句时,对于已删除的模型,不会触发删除和删除模型事件。这是因为执行删除语句时从未实际检索模型。
那么,我该如何应对这种情况呢?任何解决方案或建议将不胜感激。