ThinkPHP6搜索器的使用

我們?cè)谧龆鄺l件搜索的時(shí)候,可以使用傳統(tǒng)的數(shù)組方式,今天給大家介紹另外一種,就是thinkphp6搜索器。

一、了解搜索器的定義

我們依然先看看手冊(cè)中關(guān)于搜索器的說明。

搜索器的作用是用于封裝字段(或者搜索標(biāo)識(shí))的查詢條件表達(dá)式,一個(gè)搜索器對(duì)應(yīng)一個(gè)特殊的方法(該方法必須是 public 類型),方法命名規(guī)范為:search FieldName AttrFieldName 為數(shù)據(jù)表字段的駝峰轉(zhuǎn)換,搜索器僅在調(diào)用 withSearch 方法的時(shí)候觸發(fā)。

二、建立搜索條件

如何使用搜索器?我們結(jié)合實(shí)例來講解。

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

ThinkPHP6搜索器的使用

我們有三個(gè)搜索條件分別是:goods_cate_id(分類篩選)、goods_status(狀態(tài)篩選)、goods_name(關(guān)鍵字篩選)。

我們先建立三個(gè)搜索方法:

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.'%'); ????}

要特別注意,搜索方法的命名,我們必須嚴(yán)格按照官方手冊(cè)中的要求定義。比如說我們數(shù)據(jù)表搜索字段為goods_cate_id,那么在定義方法的時(shí)候如下都是錯(cuò)誤的:

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

2、public?function?searchGoodsCateIDAttr($query,?$value),駝峰寫法錯(cuò)誤。

3、public?function?searchGoodsCateAttr($query,?$value),少Id駝峰寫法錯(cuò)誤。

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

三、觸發(fā)搜索

搜索器只有在調(diào)用 withSearch 方法的時(shí)候觸發(fā)。

$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);

另外,搜索器除了可以做搜索,同時(shí)也可以做排序功能,在這里就不再舉例。

在調(diào)試的時(shí)候,我們還可以打印下sql語句,如果沒有我們想要的結(jié)果,我們可以直接分析sql語句。

echo?Goods::getLastSql();

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享