Правильный способ перебрать галочку и удалить все отмеченные категории с как можно меньшим количеством запросов?

До сих пор мне приходилось нажимать кнопку удаления каждый раз, когда я хотел удалить категорию. Поэтому, если бы я хотел удалить 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>

И моя функция deleteCategories () до сих пор выглядит так:

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 я запускаю запрос, чтобы найти категорию с этим идентификатором, а затем удаляю ее из базы данных и локального хранилища. Это означает, что если я выбрал 4 флажка, мне нужно было выполнить 4 запроса, чтобы найти эти конкретные категории, а затем удалить их.

Есть ли лучший способ сделать это с меньшим количеством запросов? Я открыт для редактирования как HTML, так и PHP, если это сделает его быстрее, более читабельным, более масштабируемым и т. Д.

0

Решение

использование whereIn:

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

Замечания: Если вы не хотите, чтобы записи были окончательно удалены, убедитесь, что Category модель настроена на обработку мягких удалений.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector