首页 > 解决方案 > Laravel 旧图像未使用 getOriginal 方法删除

问题描述

在我的 Laravel 7 项目中,我正在根据 Stationname字段重命名上传的图像。Str::of($name)->slug()使用如下所示将字符串转换为 slug

命名图像

public function setStationName($extension, $name)
{
    return 'station-' . Str::of($name)->slug() . '.' . $extension;
}

所以它会生成一个名字station-foo-bar.png,最后将这个名字存储photo到数据库的列中。

由于该name字段是可编辑的,因此用户将能够随时更改名称字段,并且如果用户正在上传修改了名称字段的新图像,则新图像将具有新名称。

在这里我遇到了麻烦。

在使用新图像和修改字段更新记录时,如果我使用该方法删除旧图像getOriginal('photo),则不会删除图像。name但是,如果未修改该字段,它将删除图像。

车站模型

public function deletePhoto()
{
    Storage::disk('public')->delete($this->stationPhotoDir . '/' . $this->getOriginal('photo'));
}

当我dd检查它的值时,getOriginal('photo')它返回了我想要删除但它没有删除的正确文件名。

问题:

如何使用该getOriginal()方法删除旧图像?

标签: laraveleloquent

解决方案


您的问题不是getOriginal,而是删除操作中的路径不正确。

添加Log::info($this->stationPhotoDir . '/' . $this->getOriginal('photo'))并查看路径显示的内容。


推荐阅读