欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

yii2万能搜索框的写法 [基础教程]

程序员文章站 2022-06-11 11:11:15
...

也可以搜所:必免了搜素时跳到首页
<form action="?r=uploadow" method="get">
    <input type="hidden" name="r" value="uploadow">//重点
    <input type="text" name="search"/><input type="submit" value="搜索"/>
</form>


yii2万能搜索框的写法 [基础教程]

作者:代号黑鹰发布于:2016-11-08 浏览:1853次 收藏

先让大家看一下搜索框

yii2万能搜索框的写法 [基础教程]

上面两个框我写好了,突然他妈的产品经理说要加个搜索功能那我还干毛线啊?

            ---之前作为一个初级程序员我是这么写的

            在控制器老老实实的接收搜框传来的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控件给大家