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

Posted

技术标签:

【中文标题】如何使用多个类别过滤帖子?【英文标题】: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怎么样,你可以传递一个类别数组 【参考方案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

【讨论】:

谢谢,它有效。

以上是关于如何使用多个类别过滤帖子?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 按类别过滤帖子

如何获取在 Wordpress 中按类别过滤的自定义帖子类型的永久链接?

如何根据类别过滤帖子列表

如何使用 Mongoose 为单个帖子保存多个类别

如何在laravel中按类别过滤帖子?

如何在 wordpress 中使用 LIKE 搜索类别名称的帖子?