php - Laravel 对类别进行多选过滤,只得到一个选择作为输出
问题描述
在 laravel 8 中,我按类别过滤博客文章。但是,当我在选择菜单中选择多个类别时。我确实得到了正确的要求。例如:articles/category/?category_ids=3,4
但它只会输出一个选定的过滤器。如果我选择 2 个过滤器,它只会选择下一个过滤器,就好像我只选择了那个过滤器一样。(我也使用 Axios,但请求正确完成,所以它在我的控制器中)
这是我尝试过的代码:
$data['articles'] = Article::whereHas('categories', function ($query) use($category_ids){
$query->whereHas('category_id', '=', $category_ids)->where('premium',0);
;})->get();
我也试过:
$data['articles'] = Article::whereHas('categories', function ($query) use($category_ids){
$query->whereIn('category_id', [$category_ids])->where('premium',0);
;})->get();
那么如何查询两个或多个类别 ID 呢?
我正在使用数据透视表:
文章可以有多个类别
类别可以有很多文章
我使用 article_category 作为数据透视表
解决方案
在多对多关系中检查关系是否存在时,仍需对类别表中的 id 进行检查。
尝试这个
$category_ids = collect(explode(',', $request->category_ids))
->map(fn($i) => trim($i))
->all();
$data['articles'] => Article::whereHas('category', fn($query) =>
$query->whereIn('categories.id', $category_ids)
->where('categories.premium', 0)
)->get();
推荐阅读
- json - 如何在python中通过多个键过滤json?
- twilio - Twilio Flex - 添加具有受限访问权限的代理,无需单点登录 SSO
- c# - Firebase-realtime-database 如何将嵌套子节点中的数据作为列表返回
- azure - 如何使用 Packer + Terraform 创建小于 30GB 的自定义 Azure 映像?
- excel - 将一个工作表中命名范围的单元格值复制到另一个工作表,从用户定义的单元格开始
- java - 每次程序循环时如何创建一个新对象?
- python - 如何写入由 5 个制表符分隔的列的文件
- r - 数据帧中的二进制操作
- macos - 尝试在脚本中使用“rm”
- c++ - 未定义对“con(double)”collect2.exe 的引用:错误:ld 返回 1 退出状态