• 技术文章 >php框架 >ThinkPHP

    ThinkPHP6搜索器的使用

    王雪芹王雪芹2020-06-30 13:46:46原创1521
    我们在做多条件搜索的时候,可以使用传统的数组方式,今天给大家介绍另外一种,就是ThinkPHP6搜索器。

    一、了解搜索器的定义

    我们依然先看看手册中关于搜索器的说明。

    搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式,一个搜索器对应一个特殊的方法(该方法必须是 public 类型),方法命名规范为:

    search FieldName Attr

    FieldName 为数据表字段的驼峰转换,搜索器仅在调用 withSearch 方法的时候触发。

    二、建立搜索条件

    如何使用搜索器?我们结合实例来讲解。

    微信截图_20200626170328.png

    我们有三个搜索条件分别是:goods_cate_id(分类筛选)、goods_status(状态筛选)、goods_name(关键字筛选)。

    我们先建立三个搜索方法:

    public function searchGoodsCateIdAttr($query, $value)
        {
            $query->where('goods_cate_id','in', $value);
        }
    
        public function searchGoodsStatusAttr($query, $value)
        {
            $query->where('goods_status','=', $value);
        }
    
        public function searchGoodsNameAttr($query, $value)
        {
            $query->where('goods_name','like', '%'.$value.'%');
        }

    要特别注意,搜索方法的命名,我们必须严格按照官方手册中的要求定义。比如说我们数据表搜索字段为goods_cate_id,那么在定义方法的时候如下都是错误的:

    1、public function searchGoodsCateId($query, $value),少Attr。

    2、public function searchGoodsCateIDAttr($query, $value),驼峰写法错误。

    3、public function searchGoodsCateAttr($query, $value),少Id驼峰写法错误。

    4、private function searchGoodsCateIdAttr($query, $value),必须是public。

    三、触发搜索

    搜索器只有在调用 withSearch 方法的时候触发。

    $goodsData=Goods::name('goods')->withSearch(['goods_cate_id','goods_status','goods_name'],[
                    'goods_cate_id'=>$cateChilerenId,
                    'goods_status'=>$goods_status,
                    'goods_name'=>$goods_name
                ])->paginate(10);

    另外,搜索器除了可以做搜索,同时也可以做排序功能,在这里就不再举例。

    在调试的时候,我们还可以打印下sql语句,如果没有我们想要的结果,我们可以直接分析sql语句。

    echo Goods::getLastSql();

    以上就是关于ThinkPHP6搜索器的使用讲解,那么在做多条件搜索的时候,中意哪个就用哪个,也可以根据自己情况自行选择。

    以上就是ThinkPHP6搜索器的使用的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:ThinkPHP6
    上一篇:ThinkPHP 6.0 多语言优化扩展包的安装与使用 下一篇:解决TP6报错“当前访问路由未定义或不匹配”的方法
    大前端线上培训班

    相关文章推荐

    • 在 ThinkPHP6 中使用 Workerman• 说一说ThinkPHP6的空控制器• thinkphp6中5种方法获取api请求地址中的参数• ThinkPHP6中的事务操作

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网