如何使用多个类别过滤帖子?
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
。您可以在循环中使用带有 orWhere
的 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 Clauses whereIn
我到处都试过了,但我找不到任何解决办法:(,我想通过使用类别复选框来搜索帖子,例如,如果用户检查摄影和绘画类别,它只会显示包含 $[= 的帖子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
。您可以在循环中使用带有 orWhere
的 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 Clauses whereIn