Php 使用尽可能少的查询循环检查复选框并删除所有已勾选类别的正确方法?

Php 使用尽可能少的查询循环检查复选框并删除所有已勾选类别的正确方法?,php,laravel,Php,Laravel,到目前为止,每当我想删除一个类别时,我都必须单击一个删除按钮。因此,如果我想删除10个类别,我必须点击删除按钮10次。这就是为什么我现在尝试实现一个复选框,然后只循环检查被选中的类别,但是,我不确定是否使用尽可能少的查询来完成 我的复选框如下所示: <form method="POST" action="{{ route('deleteCategories') }}"> @foreach($categories as $category) <inpu

到目前为止,每当我想删除一个类别时,我都必须单击一个删除按钮。因此,如果我想删除10个类别,我必须点击删除按钮10次。这就是为什么我现在尝试实现一个复选框,然后只循环检查被选中的类别,但是,我不确定是否使用尽可能少的查询来完成

我的复选框如下所示:

<form method="POST" action="{{ route('deleteCategories') }}">
     @foreach($categories as $category)
         <input type="checkbox" name="categories[]" value="{{ $category->id }}">{{ $category->name }}<br>
     @endforeach
     <button class='delete-btn' type="submit">Delete</button>
     {{ csrf_field() }}
     {{ method_field('delete') }}
</form>
如您所见,对于$categories中的每个$category,我运行一个查询以查找具有该id的类别,然后将其从数据库和本地存储中删除。这意味着如果我选择了4个复选框,我必须运行4个查询来查找这些特定类别,然后删除它们

有没有更好的方法用更少的查询来实现这一点?我愿意同时编辑HTML和PHP,如果这能使它更快、更可读、更可伸缩等。

使用其中:


注意:如果您不想永久删除记录,请确保类别模型已设置为处理软删除。

我刚刚检查了什么是软删除,因为我不知道,我想知道在什么情况下,我希望从数据库中软删除而不是直接永久删除?最终这取决于您的需求应用意外删除类别可能是一种情况。通过这种方式,您可以使用“还原类别”选项向用户显示意外删除的类别。啊,我明白了,这很有意义。Where是否会接收多个ID并一次性删除它们?我是否仍然需要进行查询,以便获得图像\u文件\u名称,然后用于从本地存储中删除文件?否,其中接收一个值数组,传递一个类别ID数组足以执行删除。
public function deleteCategories(Request $request){

    if (!Auth::user()->hasRole('Admin')) {
            return redirect()->back();
    } else if (Auth::user()->hasRole('Admin')) {
        $categories = $request['categories'];
        foreach ($categories as $category) {
            $categoryToDelete = Category::where('id', $category)->first();
            $categoryName = $categoryToDelete->image_file_name;
            $categoryToDelete->delete();
            Storage::delete('public/uploads/categories/'.$categoryName);
            Storage::delete('public/uploads/categories/thumbnails/'.$categoryName);
        }
        return redirect()->back();
    }

}
Category::whereIn('id', $request->get('categories'))->delete();