【问题标题】:How to filter posts by using multiple category?如何使用多个类别过滤帖子?
【发布时间】:2022-01-14 18:58:01
【问题描述】:

我到处尝试,但找不到任何解决方案:(,例如,我想使用类别复选框搜索帖子,如果用户检查摄影和绘画类别,它只显示具有 $category_slug=photography 的帖子或$category_slug=drawing 但它仅在我检查一个类别类型时才有效,如果我选择多个类别类型,它不会返回任何内容。请帮助

刀片

@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]);
}

感谢您的帮助。

【问题讨论】:

  • 为什么没有数据透视表来链接postscategories?似乎你在posts 上有一个category_slug 字段,那怎么会有多个值? (您的设置怎么可能有多个类别?)
  • @lagbox category_slugPosts 表的 FK 列,它引用 categories 中的 slug 表。我认为它不需要数据透视表,因为我只有 6 个类别。此外,帖子只有一种类别类型。
  • 该列只能保存 1 个值,那么一个帖子怎么可能有多个类别呢? “如果用户检查摄影绘画类别,它只显示具有两个类别的帖子” ...帖子怎么可能同时拥有这两个类别?
  • 我知道一个帖子只有一个类别类型,但我想展示这样的内容select * from posts where category_slug = photography or category_slug = drawing
  • 这两者都不是......这是一个另一个......whereIn怎么样,你可以传递一个类别数组

标签: php laravel eloquent


【解决方案1】:

基本上你想说你想找到属于任何被选中的categories 的任何posts。您可以在循环中使用带有orWheres 的where 或使用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 ClauseswhereIn

【讨论】:

  • 谢谢,它有效。
猜你喜欢
  • 1970-01-01
  • 2017-06-12
  • 2021-06-23
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多