다중 조건 검색을 할 때 전통적인 배열 방식을 사용할 수 있습니다. 오늘은 또 다른 검색기인 ThinkPHP6 검색기를 소개하겠습니다.
1. 검색자의 정의를 이해하세요
먼저 매뉴얼에 있는 검색자에 대한 설명을 살펴보겠습니다.
검색기의 기능은 필드(또는 검색 식별자)의 쿼리 조건 표현을 캡슐화하는 것입니다. 검색기는 특수 메서드에 해당합니다(메서드 이름 지정 사양은
search). FieldName Attr
FieldName은 데이터 테이블 필드의 카멜 케이스 변환이며, withSearch 메소드가 호출될 때만 검색기가 트리거됩니다.
2. 검색조건 만들기
검색어는 어떻게 사용하나요? 예를 들어 설명하겠습니다.
상품_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. 검색 트리거
SearcherOnlywithSearch 메소드를 호출할 때 트리거됩니다.
$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);
echo Goods::getLastSql();
위 내용은 ThinkPHP6 검색 엔진 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!