我们在做多条件搜索的时候,可以使用传统的数组方式,今天给大家介绍另外一种,就是ThinkPHP6搜索器。
一、了解搜索器的定义
我们依然先看看手册中关于搜索器的说明。
搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式,一个搜索器对应一个特殊的方法(该方法必须是public类型),方法命名规范为:searchFieldNameAttrFieldName为数据表字段的驼峰转换,搜索器仅在调用withSearch方法的时候触发。
二、建立搜索条件
如何使用搜索器?我们结合实例来讲解。
我们有三个搜索条件分别是:goods_cate_id(分类筛选)、goods_status(状态筛选)、goods_name(关键字筛选)。
我们先建立三个搜索方法:
publicfunctionsearchGoodsCateIdAttr($query,$value){$query-where(goods_cate_id,in,$value);}publicfunctionsearchGoodsStatusAttr($query,$value){$query-where(goods_status,=,$value);}publicfunctionsearchGoodsNameAttr($query,$value){$query-where(goods_name,like,%.$value.%);}
要特别注意,搜索方法的命名,我们必须严格按照官方手册中的要求定义。比如说我们数据表搜索字段为goods_cate_id,那么在定义方法的时候如下都是错误的:
1、publicfunctionsearchGoodsCateId($query,$value),少Attr。2、publicfunctionsearchGoodsCateIDAttr($query,$value),驼峰写法错误。3、publicfunctionsearchGoodsCateAttr($query,$value),少Id驼峰写法错误。4、privatefunctionsearchGoodsCateIdAttr($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语句。
echoGoods::getLastSql();
以上就是关于ThinkPHP6搜索器的使用讲解,那么在做多条件搜索的时候,中意哪个就用哪个,也可以根据自己情况自行选择。