一、背景
基本所有的后台部分,都需要一定的搜索条件,方便客服人员进行搜索。因为对tp不太熟悉,所以也耽误了不少时间。记录一下
二、查询方法
1、以前用laravel查询,都是用类似于拼接sql的方法做的,类似于:
//$sql表示查询语句的一半。后续根据条件进行拼接
$sql = M('smj_myticket')->alias('m')
->join('smj_activity a ON m.aid=a.id')
->join('smj_userinfo u ON m.openid=u.openid')
->field('m.*,a.name,a.num,a.condition,u.nickname,u.phone');
//这里代表是,如果存在开始时间,则拼接一部分where条件
if($starttime){
$starttime = strtotime($starttime);
$sql = $sql->where('m.starttime>='."'$starttime'");
}
//这里代表是,如果存在结束时间,则拼接一部分where条件
if($endtime){
$endtime = strtotime($endtime);
$sql = $sql->where('m.endtime<='."'$endtime'");
}
//最后,加上select()进行查询
$arr = $sql ->limit($p->firstRow,$p->listRows)
->select();
本来以为没啥毛病的。结果在tp中一直报错。好像这种方式在tp里面是不支持的。。
2、TP中正确的条件查询方式
//先获取post过来的数据
$openid = $_POST['openid'];
$nickname = $_POST['nickname'];
//新建空数组where
$where = [];
//根据条件,往where里面加条件限制
if($openid){
$where['openid'] = ['EQ', $openid];
}
if($nickname){
$where['nickname'] = ['EQ', $nickname];
}
$count = M('smj_userinfo')->where($where)->count();
$p = getpage($count,5);
//最后查询的时候,加上where条件即可。
$arr = M('smj_userinfo')
->limit($p->firstRow, $p->listRows)
->order('id')
->where($where)
->select();
大家看一下上面的代码就懂了。tp有个很有意思的地方就是where里面可以是数组。这里就是利用tp的这个特性,把那些条件搜索都写到$where这个数组里面。最后查询的时候用一下即可。
end