首頁 >php框架 >ThinkPHP >ThinkPHP6搜尋器的使用

ThinkPHP6搜尋器的使用

王雪芹
王雪芹原創
2020-06-26 17:17:343807瀏覽

我們在做多條件搜尋的時候,可以使用傳統的陣列方式,今天跟大家介紹另外一種,就是ThinkPHP6搜尋器。

一、了解搜尋器的定義

我們還是先看看手冊中關於搜尋器的說明。

搜尋器的作用是用於封裝欄位(或搜尋標識)的查詢條件表達式,一個搜尋器對應一個特殊的方法(該方法必須是public 類型),方法命名規範為:

search FieldName Attr

FieldName 為資料表欄位的駝峰轉換,搜尋器僅在呼叫withSearch 方法的時候觸發。

二、建立搜尋條件

如何使用搜尋器?我們結合實例來講解。

ThinkPHP6搜尋器的使用

我們有三個搜尋條件分別是: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn