我們在做多條件搜尋的時候,可以使用傳統的陣列方式,今天跟大家介紹另外一種,就是ThinkPHP6搜尋器。
一、了解搜尋器的定義
我們還是先看看手冊中關於搜尋器的說明。
搜尋器的作用是用於封裝欄位(或搜尋標識)的查詢條件表達式,一個搜尋器對應一個特殊的方法(該方法必須是public 類型),方法命名規範為:
search FieldName Attr
FieldName 為資料表欄位的駝峰轉換,搜尋器僅在呼叫withSearch 方法的時候觸發。
二、建立搜尋條件
如何使用搜尋器?我們結合實例來講解。
我們有三個搜尋條件分別是: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中文網其他相關文章!