>  기사  >  PHP 프레임워크  >  ThinkPHP6 검색 엔진 사용

ThinkPHP6 검색 엔진 사용

王雪芹
王雪芹원래의
2020-06-26 17:17:343764검색

다중 조건 검색을 할 때 전통적인 배열 방식을 사용할 수 있습니다. 오늘은 또 다른 검색기인 ThinkPHP6 검색기를 소개하겠습니다.

1. 검색자의 정의를 이해하세요

먼저 매뉴얼에 있는 검색자에 대한 설명을 살펴보겠습니다.

검색기의 기능은 필드(또는 검색 식별자)의 쿼리 조건 표현을 캡슐화하는 것입니다. 검색기는 특수 메서드에 해당합니다(메서드 이름 지정 사양은

search). FieldName Attr

FieldName은 데이터 테이블 필드의 카멜 케이스 변환이며, withSearch 메소드가 호출될 때만 검색기가 트리거됩니다.

2. 검색조건 만들기

검색어는 어떻게 사용하나요? 예를 들어 설명하겠습니다.

ThinkPHP6 검색 엔진 사용

상품_cate_id(카테고리 필터링), 상품_상태(상태 필터링), 상품_이름(키워드 필터링)의 세 가지 검색 조건이 있습니다.

먼저 세 가지 검색 방법을 만듭니다.

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), less Attr.

2. 공용 함수 searchGoodsCateIDAttr($query, $value), 카멜 케이스가 잘못 작성되었습니다.

3. 공개 함수 searchGoodsCateAttr($query, $value), ID가 카멜 표기법으로 잘못 작성되었습니다.

4. 비공개 함수 searchGoodsCateIdAttr($query, $value)는 공개되어야 합니다.

3. 검색 트리거

Searcher

Only 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 문을 직접 분석할 수도 있습니다.

echo Goods::getLastSql();

위는 ThinkPHP6 검색 엔진 사용에 대한 설명입니다. 다중 조건 검색을 할 때 원하는 것을 사용하거나 상황에 따라 선택할 수 있습니다.

위 내용은 ThinkPHP6 검색 엔진 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.