小编iro*_*eek的帖子

在 Laravel 5.4 中执行批量删除语句时,如何根据 Eloquent 'deleting' 事件执行操作?

我的项目中有 2 个 Eloquent 模型:App\StoredFileApp\StoredImageSize.

StoredFile模型负责保存上传的文件信息。如果上传的文件是一个图像,那么 2 个缩略图将存储在存储中,它们的属性在 DB(StoredImageSize模型)中。

关系如下:

存储文件.php:

public function sizes()
{
    return $this->hasMany('App\StoredImageSize');
}
Run Code Online (Sandbox Code Playgroud)

存储图像大小.php:

public function originalImage()
{
    return $this->belongTo('App\StoredFile');
}
Run Code Online (Sandbox Code Playgroud)

StoredImageSize有一个观察者类 ( StoredImageSizeObserver),它已通过 ServiceProvider 注册并且运行良好。

问题是,当从数据库中删除后续行时,我想从存储(在我的情况下是硬盘)中删除实际文件。

StoredImageSizeObserver.php:

public function deleting(StoredImageSize $file)
{
    Storage::delete($file->server_url);
}
Run Code Online (Sandbox Code Playgroud)

逻辑是这样的:

$file = StoredFile::find(1);
$file->sizes()->delete();    // it does delete all related rows from 'StoredImageSize' but not files from storage
$file->delete()
Run Code Online (Sandbox Code Playgroud)

实际上它从来没有像Laravel 文档所说的那样deletingStoredImageSizeObserver类中调用方法: …

php laravel eloquent

7
推荐指数
1
解决办法
8201
查看次数

标签 统计

eloquent ×1

laravel ×1

php ×1