先让大家看一下搜索框
上面两个框我写好了,突然他妈的产品经理说要加个搜索功能那我还干毛线啊?
---之前作为一个初级程序员我是这么写的
在控制器老老实实的接收搜框传来的input[]控件的name值拼接sql语句----还是那一句我不想改代码让前端搞去。怎么办?(不过我无意中发现别人在前端这样传值--看下面(注意input里面的name取名))
<form action="cate/index" method="get">
<div class="form-group">
<label>编号:</label>
<input type="text" class="form-control" id="query[cid]" name="query[cid]">
</div>
<div class="form-group">
<label>分类名称:</label>
<input type="text" class="form-control" id="query[name]" name="query[name]">
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary btn-sm" value="搜索">
</div>
</form>
后台接受的是什么呢?
$querys = Yii::$app->request->get('query'); var_dump($querys) //打印出来的是数组
$querys = Yii::$app->request->get('query[name]'); var_dump($querys) //打印出来的是字符
原来前端还可以这样传值,好-----搜索框让前端做了,不鸟你这个项目经理了
现在后台怎么操作看下面代码
$querys = Yii::$app->request->get('query');
if (count($querys) > 0) {
$i=1;
foreach ($querys as $key => $value) {
$value = trim($value);
if (empty($value) == false) {
if($i){
$i=0;
$query = $query->where(array('like', $key, $value));
}else{
$query = $query->andWhere(array('like', $key, $value));
}
}
}
}
$pagination = new Pagination([
'totalCount' => $query->count(),
'pageSize' => '10',
'pageParam' => 'page',
'pageSizeParam' => 'per-page']
);
$models = $query
->offset($pagination->offset)
->limit($pagination->limit)
->all();
总结:
这里不能进行模糊查询,但是在foreach()里面可以大做文章。比如:
a.判断一下是否是数字---进行精准查询条件构造 $cond = ['=',$key, 10]
b.判断一下是否是时间---进行时间条件查询构造 $cond = ['between',$key, 1, 10]/*这里可能还要想一下*/
c.没有特殊情况 ---进行模糊查询条件构造 $cond = ['like',$key,$value]
好了就介绍到这里了:过几天写一个widget控件给大家