ThinkPHP使用getlist方法实现数据搜索功能示例
本文实例讲述了ThinkPHP使用getlist方法实现数据搜索功能。分享给大家供大家参考,具体如下:
自己在ThinkPHP之中的model之中书写getlist方法,其实所谓的搜索功能无非就是数据库查询之中用到的like %string%,或者其他的字段名=特定值,这些sql语句拼接在and语句之中;
HTML之中:
订单号: 下单日期: 至 交易完成日期 至 订单金额: 至 采购商名称: 采购商账号:
看到没GET方法提交表单,这个是查询条件填入选项;
控制器之中:
$order_msg=$order->getList(); $this->assign('info',$order_msg);//这个获取订单的详细信息
Model之中:
publicfunctiongetList($pagesize=25){ $tableName=$this->getTableName(); $where=$tableName.'.service_id='.$_SESSION['service_site']['service_id']; if(!empty($_GET['order_sn'])){//查询订单号 $where.="and$tableName.`order_sn`like'%".$_GET['order_sn']."%'"; } if(!empty($_GET['count_price_min'])){//查询订单最小金额 $where.="and$tableName.count_price>=".$_GET['count_price_min'].""; } if(!empty($_GET['begintime'])){//下单开始日期搜索 $_GET['begintime']=strtotime($_GET['begintime']);//将日期转为时间戳 $where.="and$tableName.add_time>=".$_GET['begintime'].""; $_GET['begintime']=date('Y-m-d',$_GET['begintime']);//将日期转为时间戳 } if(!empty($_GET['endtime'])){//下单结束日期搜索 $_GET['endtime']=strtotime($_GET['endtime']);//将日期转为时间戳 $where.="and$tableName.add_time<=".$_GET['endtime'].""; $_GET['endtime']=date('Y-m-d',$_GET['endtime']);//将时间戳转换成日期,方便刷新页面后前台显示 } if(!empty($_GET['finishbegintime'])){//交易完成开始日期搜索 $_GET['finishbegintime']=strtotime($_GET['finishbegintime']);//将日期转为时间戳 $where.="and$tableName.ok_time>=".$_GET['finishbegintime'].""; $_GET['finishbegintime']=date('Y-m-d',$_GET['finishbegintime']);//将日期转为时间戳 } if(!empty($_GET['finishendtime'])){//交易完成结束日期搜索 $_GET['finishendtime']=strtotime($_GET['finishendtime']);//将日期转为时间戳 $where.="and$tableName.ok_time<=".$_GET['finishendtime'].""; $_GET['finishendtime']=date('Y-m-d',$_GET['finishendtime']);//将时间戳转换成日期,方便刷新页面后前台显示 } if(!empty($_GET['send'])){//查询已发货预警订单,发货时间距离此刻超过五天 $where.="and$tableName.send_time<'".(time()-60*60*24*5)."'"; } if(!empty($_GET['doingorder'])){//查询处理中的订单 $where.="and$tableName.statusin(0,1)"; } if(!empty($_GET['warningorder'])){//查询预警的订单:已经付款且时间超过24小时未发货 $where.="and$tableName.pay_time<'".(time()-60*60*24)."'"; } if(!empty($_GET['warningorder'])){//查询预警的订单:已经付款且时间超过24小时未发货 $where.="and$tableName.is_pay=1"; } if(!empty($_GET['warningorder'])){//查询预警的订单:已经付款且时间超过24小时未发货 $where.="and$tableName.statusin(0,1)"; } if(!empty($_GET['count_price_max'])){//查询订单最大金额 $where.="and$tableName.count_price<=".$_GET['count_price_max'].""; } if(!empty($_GET['user_nick_name'])){//查询采购商名称 $where.="andfab_user.nick_namelike'".$_GET['user_nick_name']."%'"; } if(!empty($_GET['user_name'])){//查询采购商账号 $where.="andfab_user.user_namelike'".$_GET['user_name']."%'"; } if(!empty($_GET['supplier_nick_name'])){//查询供应商商名称 $where.="andfab_supplier.nick_namelike'".$_GET['supplier_nick_name']."%'"; } if(!empty($_GET['supplier_name'])){//查询供应商账号 $where.="andfab_supplier.supplier_namelike'".$_GET['supplier_name']."%'"; } if($_GET['history']==1){ $where.="and{$tableName}.statusin(2,3,4)"; } if(($_GET['pay_type'])!=""&&($_GET['pay_type'])!=-1){//查询支付方式 $where.="andfab_order_info.pay_type=".$_GET['pay_type'].""; } if(($_GET['status'])!=""&&($_GET['status'])!=-1){//查询订单状态 $where.="andfab_order_info.status=".$_GET['status'].""; } if(!empty($_GET['stime'])&&!empty($_GET['etime'])){ $stime=strtotime($_GET['stime']); $etime=strtotime($_GET['etime'])+24*60*60; $where.="and($tableName.`inputtime`between'$stime'and'$etime')"; } $count=$this->where($where)->count(); $this->countNum=$count; $Page=new\Think\Page($count,$pagesize); $this->page=$Page->show(); $limit=$Page->firstRow.','.$Page->listRows; $sql="select$tableName.*,fab_supplier.nick_nameassupplier_nick_name,fab_user.nick_nameasuser_nick_name from($tableNameleftjoinfab_supplieronfab_order_info.supplier_id=fab_supplier.supplier_id) leftjoinfab_useronfab_order_info.user_id=fab_user.user_idwhere$whereorderby$tableName.`order_id`desclimit$limit"; $sqls="selectsum(fab_order_info.count_price)asorder_price,count(fab_order_info.count_price)asorder_count from$tableNamewhere$whereorderby$tableName.`order_id`desclimit$limit"; $this->sql_msg=$this->query($sqls); return$this->query($sql);//订单详细信息 }
你只需要留意那个GET数据获取,然后进行拼接SQL语句;你为何总是拼接错误呢!!!
getTableName(); $count=$this->where($where)->count(); $Page=new\Think\Page($count,$pagesize); $this->page=$Page->show(); $limit=$Page->firstRow.','.$Page->listRows; return$this->query("select*from$tableNamewhere$whereorderby$tableName.`id`asclimit$limit"); } publicfunctiongetPage(){ return$this->page; } }
精简通用版getlist,实用于分页。
getTableName(); $count=$this->where($where)->count(); $Page=new\Think\Page($count,$pagesize); $this->page=$Page->show(); $limit=$Page->firstRow.','.$Page->listRows; return$this->query("select*from$tableNamewhere$whereorderby$tableName.`id`asclimit$limit"); } publicfunctiongetPage(){ return$this->page; } }
精简版MODEL用于数据自动验证
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。