php - laravel 过滤器返回所有记录
问题描述
我尝试使用三个输入进行搜索,在第一种情况下,当我使用所有输入进行搜索时,它会返回结果,在第二种情况下,当我仅使用一个字段进行搜索时,它会返回所有记录我想要做的是当我搜索时对于一个字段,它会返回一个特定的结果,
public function multiSearch(Request $request){
$search = $request->input('search');
$search_1 = $request->input('search_1');
$search_2 = $request->input('search_2');
$cars = Car::query()
->where('price', 'LIKE', "%{$search}%")
->orWhere('model', 'LIKE', "%{$search_1}%")
->orWhere('transmission', 'LIKE', "%{$search_2}%")
->get();
return view('car.car-multisearch', ['cars'=>$cars]);
}
这是我的刀片代码
<form type="get" action="{{url('/search-car')}}">
@csrf
<div class="row">
<div class="col-md-4">
<p>
<input type="text" name="search" placeholder="Price" />
</p>
</div>
<div class="col-md-4">
<p>
<input type="text" name="search_1" placeholder="Model Year" />
</p>
</div>
<div class="col-md-4">
<p>
<select name="search_2">
<option data-display="Transmission">Transmission</option>
<option value="Automatic">Automatic</option>
<option value="Manual">Manual</option>
</select>
</p>
</div>
<button type="submit" class="gauto-theme-btn">Find Car</button>
</div>
</form>
解决方案
您可以根据请求中存在的值以及它们是否不为空,动态地将 where 语句添加到查询中。例子:
public function multiSearch(Request $request){
$cars = Car::query();
if ( $request->filled('search') ) {
$cars->where('price', 'LIKE', "%{$request->input('search')}%");
}
if ( $request->filled('search_1') ) {
$cars->orWhere('model', 'LIKE', "%{$request->input('search_1')}%");
}
if ( $request->filled('search_2') ) {
$cars->orWhere('transmission', 'LIKE', "%{$request->input('search_2')}%");
}
return view('car.car-multisearch', ['cars'=> $cars->get() ]);
}
这个解决方案可以完成这项工作,但看起来并不好,因为您需要为每个过滤器添加更多 if 语句。)
推荐阅读
- flutter - Flutter_web 使用 google_sign_in
- java - 当我添加计时器时,图像将不再加载
- macos - 适用于 macOS 的 Parallels 虚拟机与主机完全隔离
- lodash - 如何打破 Lodash 嵌套循环
- wordpress - 订单页面列中的自定义结帐字段 | 电子商务
- customization - ns2无线仿真中有什么方法可以追踪到具体的节点吗?
- css - Gulp sass 编译复制 scss 文件
- mongodb - 如何使用两个并行数组优化 mongo 查询?
- python - 在网页上搜索字符串时获取“TypeError:参数应该是整数或类似字节的对象,而不是'str'”
- python - Seaborn 计数图未显示正确的频率