如何使用多个类别过滤帖子?

How to filter posts by using multiple category?

我到处都试过了,但我找不到任何解决办法:(,我想通过使用类别复选框来搜索帖子,例如,如果用户检查摄影和绘画类别,它只会显示包含 $[= 的帖子24=]=photography OR $category_slug=drawing 但它只在我检查一个类别类型时有效如果我 select 多个类别类型它没有 return 任何东西。请帮助

blade

@if (isset($categories))
  @foreach ($categories as $category)
    <div class="list-group-item checkbox">
      <label>
        <input type="checkbox" class="common_selector category" name="cate[]" value="{{ $category->slug }}">
        {{$category->name }}
      </label>
    </div>
  @endforeach
@endif

控制器

public function search(Request $request)
{
    $categories = Category::all();

    $txtSearch = $request->input('q');
    if (isset($txtSearch)) {
        $query = Post::where('title', 'LIKE', "%$txtSearch%")->orderBy('id', 'DESC');
    } else {       
        $query = Post::orderBy('id', 'DESC');
        if ($request->has('cate')) {
            $categoryType = $request->input('cate');
            foreach ($categoryType as $category) {
                $query->where('category_slug', $category);
            }
        }
    }

    $queryResults = $query->paginate(20);

    return view('searchPage, ['categories' => $categories, 'queryResults' => $queryResults]);
}

感谢您的帮助。

基本上你想说的是你想找到属于任何选定 categories 的任何 posts。您可以在循环中使用带有 orWherewhere 或使用 whereIn。这是一个使用 whereIn:

的例子
if ($request->has('cate')) {
    $query->whereIn('category_slug', (array) $request->input('cate', []));
}

如果您验证输入 cate 是一个数组,您可以从中删除 (array) 转换和 input.

的第二个参数

Laravel 8.x Docs - Query Builder - Additional Where Clauses whereIn