如何删除文件数组?

时间:2017-07-01 15:37:09

标签: php laravel

我在删除属于帖子的文件数组时遇到问题。我有以下更新功能:

public function update(Post $post, PostsReq $request) {
        $input = $request->all();
        if ($request->hasFile('image')) {
            $this->deleteImage($post);

            foreach ($request->file('image') as $file) {
                $ext = $file->getClientOriginalExtension();
                $name = $file->getClientOriginalName();

                $image_name = $name . ".$ext";
                $upload_path = 'image';
                $file->move($upload_path, $image_name);
                Photos::create([
                    'post_id' => $post->id,
                    'image' => $image_name,
                ]);
            }
        }
        $post->update($input);
        return redirect()->route('postindex');
    }

我想要的是当更新表单从输入接收新文件时,它将删除旧文件,然后用新文件替换它们。但我无法使该方法删除工作的文件。以下是删除文件方法:

private function deleteImage(Post $post)   
        $photos = Photos::where('post_id', $post->id)->get();
        $exist = Storage::disk('image')->exists($photos);
        if (isset($photos) && $exist) {
            $delete = Storage::disk('image')->delete($photos);
            if ($delete) {
                return true;
            }
            return false;
        }
    }

此外,我想知道是否有更好的方法来执行此操作,例如将照片插入帖子。就像我必须创建一个文件管理器来处理文件,然后只需要将文件从那里分配到帖子? 这就是全部,谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用->pluck(PATH_PHOTO_COLUMN)获取所有路径照片的数组,并将结果数组传递给\File::delete,以便同时删除所有文件。

private function deleteImage(Post $post)
{
    $photos = Photos::where('post_id', $post->id)->pluck('photo_path');

    if(count($photos))
    {
        \File::delete($photos);
        return true;
    }

    return false;

}

答案 1 :(得分:0)

deleteImage功能中,您需要提取文件名。这是image模型中的Photos列。

你必须改变这样的功能:

private function deleteImage(Post $post){

    // pluck filename i.e. image from Photos model.

    $photos = Photos::where('post_id', $post->id)->pluck('image');

    $exist = Storage::disk('image')->exists($photos);
    if (isset($photos) && $exist) {
        $delete = Storage::disk('image')->delete($photos);
        if ($delete) {
            return true;
        }
        return false;
    }
}

希望,这可能对你有帮助。