thinkphp 多条件筛选如何实现,添加大于小于条件,时间范围查询

在这里插入图片描述
近期在做一个社区APP,管理后台中的文章管理功能涉及到了对文章进行一个条件筛选的功能,后台不是很懂,只能按照自己的思路来实现它:

管理界面中做一个表单,内容有:标题、作者、文章状态、起止时间范围等input,js控制这个表单提交的内容,有输入的就提交,没输入的就不提交,标题和作者我做了输入提示,用了thinkphp的模糊搜索,可以做联想输入;文章状态就三种:未审核、通过审核和用户自主屏蔽;起止时间,如果不选终止时间,那么就是从开始时间算到今天,如果不填开始时间,则从0开始,数据库我存入的时间都是时间戳,所以,这里做表单提交的时候,我也转换成了时间戳。

关于url传参,网上搜索了一番,得到一个解决方案:
JS使用encodeURIComponent()对表单的内容进行编码传递给后台,后台接收储存到了$word里面,然后PHPurldecode($word)解码。
解码完成之后,再对这个字符串进行处理,

$start='';
        $end='';
        $state=0;
        $start_time=0;
        $writer = '';
        $title = '';
        $words = $word;
        $option = 'false';
        $create = 'asc';
        $solt = 'asc=true,';
        $array = array();
        $where = array();
        if(!empty($word)){
            $word =  urldecode($word);
            $word =  explode(',' , $word);
            foreach ($word as $key => $value) {
                if(count(explode('=' , $value)) == 2){
                    $array[explode('=' , $value)[0]] = explode('=' , $value)[1];
                }
            }
        }
        foreach ($array as $k => $v) {
            if($k == 'title'){
                $where['title'] = array('like',array('%'.$v.'%'));
                $title = $v;
                $option = 'true';
            }
            if ($k == 'start') {
                $option = 'true';
                $where['create_time'] =  array('>',$v);
                $start_time = $v;
                $start = date("Y-m-d H:i:s",$v) ;
            }
            if ($k == 'end') {
                $option = 'true';
                $where['create_time'] =  array(['<',$v],['>',$start_time],'and');
                $end = date("Y-m-d H:i:s",$v) ;
            }
            if ($k == 'state') {
                $where['states'] = $v;
                $state = $v;
                $option = "true";
            }
            if ($k == 'writer') {
                $result = Db::name('user')->where('name',$v )->value('user');
                $where['writer'] = $result;
                $writer = $v;
                $option = 'true';
                // Cookie::set('writer',$writer,3600);
                if($result != null){
                    $where['writer'] = $result;
                }else{

                }
            }
            if($k == 'asc'){
                $create = 'asc';
                $solt = 'asc=true,';
            }
            if($k == 'desc'){
                $create = 'desc';
                $solt = 'desc=true,';
            }
        }

代码写的糟糕,勿见怪!
这里得出一个数组$where,这就是thinkphp多条件筛选的条件数组了!

title%3D每日心情%2Cwriter%3D奥创硅材_李全%2Cstate%3D1%2Cstart%3D1555404600%2Cend%3D1556179500%2C
{"title":["like",["%每日心情%"]],"writer":"18027046690","states":"1","create_time":[["<","1556179500"],[">","1555404600"],"and"]}

如下图
在这里插入图片描述

Db::name('article')->where($where)->order("create_time".' '.$create)->select();

最后筛选完成!

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值