我在删除属于帖子的文件数组时遇到问题。我有以下更新功能:
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;
}
}
此外,我想知道是否有更好的方法来执行此操作,例如将照片插入帖子。就像我必须创建一个文件管理器来处理文件,然后只需要将文件从那里分配到帖子? 这就是全部,谢谢!
答案 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;
}
}
希望,这可能对你有帮助。