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

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

先让大家看一下搜索框

I63OLEB1]O5VI`UI}}7E)CY.png

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

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

            在控制器老老实实的接收搜框传来的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控件给大家
如果文章对您有所帮助,希望继续支持我们,您的支持是我们最大的动力 ¥打赏
声明:文章内容由作者原创或整理,未经允许,不得转载!
  • 评论于 2016-11-25 14:12:49

    上班偷偷来点赞

    回复
  • 评论于 2016-11-16 10:47:14

    点赞必须点赞好东西

    回复
  • 评论于 2016-11-15 11:18:02

    太麻烦了,写一个searchModel 可以任意输入框 以及可查询关联表的字段

    回复
  • 评论于 2016-11-11 13:20:34

    偷偷过来点个赞

    回复
  • 评论于 2016-11-10 09:00:04

    为什么不用formModel来搞呢

    回复于 2016-11-10 21:44:06 回复
    过段时间把它写成组件
    回复
您需要登录后才可以评论。登录 | 立即注册