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程序设计有所帮助。