Php 如何删除文件数组?

Php 如何删除文件数组?,php,laravel,Php,Laravel,我在删除属于帖子的文件数组时遇到问题。我有以下更新功能: public function update(Post $post, PostsReq $request) { $input = $request->all(); if ($request->hasFile('image')) { $this->deleteImage($post); foreach ($request->file('

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

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;
        }
    }
我还想知道是否有更好的方法,比如在帖子中插入照片。比如,我必须创建一个文件管理器来处理文件,然后只要在需要的时候将文件从那里分配给一个帖子就行了吗?
就这些,谢谢

deleteImage
函数中,需要提取文件名。即
Photos
模型中的
image

您必须像这样更改函数:

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;
    }
}

希望,这可能会对您有所帮助。

您可以使用
->pull(path\u PHOTO\u 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;

}

新文件保存没有问题,但旧文件删除有问题。我说的对吗?正确,我在删除旧文件时遇到问题@SagarGautam
delete
函数将filename作为参数,但您没有为delete提供filename参数function@PrestonGarvey22如果你想用另一种方法来做这件事。考虑使用任何这些软件包。或它们使附加和获取媒体文件到模型文件变得容易。