多重条件判读查询,代码如何优化?
题目描述
在一个列表数据中,我们可能会有一些筛选条件,这些筛选条件是用户随机勾选的。后端需要根据这些筛选条件做数据查询,就会涉及到某个筛选字段存在,其他的筛选字段不存在的情况。如果用大量的 if 去判断,代码就不够优雅,该如何优化?
相关代码
这里就用 PHP 代码作为示例代码了,正好手里有 PHP 代码。
// 前端请求传入筛选参数
$requestParams = [];
// 根据传入的筛选参数组装筛选条件
$searchWhere = [];
if (!empty($requestParams['id'])) {
array_push($searchWhere, ['id', '=', $requestParams['id']);
}
if (!empty($requestParams['name'])) {
array_push($searchWhere, ['name', '=', $requestParams['name']);
}
if (!empty($requestParams['score'])) {
array_push($searchWhere, ['score', '>', $requestParams['score']);
}
if (!empty($requestParams['dates'])) {
$date = explode(',', $requestParams['dates']);
array_push($searchWhere, ['date', '>', $date[0]);
array_push($searchWhere, ['date', '<', $date[1]);
}
// 查询数据
$items = DB::query()->where($searchWhere)->get();
你期待的结果是什么?实际看到的错误信息又是什么?
能够减少 if 条件的判断。最好是能封装成一个类什么的,来进行处理。减少这种重复、低效的代码。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
就根据你这个筛选条件,封装成一个函数返回就可以了。比如常见的:
设计的时候考虑数据库查询是添加条件方不方便,就照着最简单的方式规范一下。
大概是这么个思路,没有用类的方式,看懂就行
输出
[["id","=",2],["name","=","test"],["date",">","2020-11-01"],["date","<","2020-11-02"]]