이 패키지를 사용하면 다양한 소스에서 구조화된 검색을 쉽게 얻을 수 있습니다. 다음은 일부 모델을 검색하는 예입니다. 우리는 이미 모델 자체에 대해 약간의 준비를 했습니다.
$ searchResults = ( new Search ())
-> registerModel ( User ::class, ' name ' )
-> registerModel ( BlogPost ::class, ' title ' )
-> search ( ' john ' );
검색은 대소문자를 구분하지 않고 수행됩니다. $searchResults
이제 name
속성에 john
포함된 모든 User
모델과 title
속성에 'john'이 포함된 BlogPost
가 포함됩니다.
이제 보기에서 검색 결과를 반복할 수 있습니다.
< h1 >Search</ h1 >
There are {{ $searchResults -> count () } } results.
@foreach ( $searchResults -> groupByType () as $type => $modelSearchResults )
< h2 > {{ $type } } </ h2 >
@foreach ( $modelSearchResults as $searchResult )
< ul >
< li >< a href = " {{ $searchResult -> url } } " > {{ $searchResult -> title } } </ a ></ li >
</ ul >
@endforeach
@endforeach
이 예에서는 모델을 사용했지만 외부 API, 파일 목록 또는 값 배열에 대한 검색 측면을 쉽게 추가할 수 있습니다.
우리는 동급 최고의 오픈 소스 패키지를 만드는 데 많은 리소스를 투자합니다. 유료 제품 중 하나를 구매하여 우리를 지원할 수 있습니다.
귀하가 사용하고 있는 당사 패키지를 언급하면서 귀하의 고향에서 엽서를 보내주셔서 진심으로 감사드립니다. 연락처 페이지에서 주소를 확인하실 수 있습니다. 우리는 수신된 모든 엽서를 가상 엽서 월에 게시합니다.
작곡가를 통해 패키지를 설치할 수 있습니다.
composer require spatie/laravel-searchable
모델을 검색하려면 Searchable
인터페이스를 구현하도록 해야 합니다.
namespace Spatie Searchable ;
interface Searchable
{
public function getSearchResult (): SearchResult ;
}
SearchResult
인스턴스를 반환해야 하는 검색 가능한 각 모델에 getSearchResult
메서드만 추가하면 됩니다. 블로그 게시물 모델의 모습은 다음과 같습니다.
use Spatie Searchable Searchable ;
use Spatie Searchable SearchResult ;
class BlogPost extends Model implements Searchable
{
public function getSearchResult (): SearchResult
{
$ url = route ( ' blogPost.show ' , $ this -> slug );
return new Spatie Searchable SearchResult (
$ this ,
$ this -> title ,
$ url
);
}
}
준비된 모델을 사용하면 다음과 같이 검색할 수 있습니다.
$ searchResults = ( new Search ())
-> registerModel ( User ::class, ' name ' )
-> search ( ' john ' );
검색은 대소문자를 구분하지 않고 수행됩니다. $searchResults
이제 name
속성에 john
포함된 모든 User
모델이 포함됩니다.
여러 속성을 전달하여 검색할 수도 있습니다.
// use multiple model attributes
$ searchResults = ( new Search ())
-> registerModel ( User ::class, ' first_name ' , ' last_name ' )
-> search ( ' john ' );
// or use an array of model attributes
$ searchResults = ( new Search ())
-> registerModel ( User ::class, [ ' first_name ' , ' last_name ' ])
-> search ( ' john ' );
세밀하게 제어하려면 콜러블을 사용할 수도 있습니다. 이 방법을 사용하면 정확히 일치하는 항목을 검색하고, 범위를 적용하고, 관계를 즉시 로드할 수 있으며, 쿼리 빌더를 사용하는 것처럼 쿼리를 필터링할 수도 있습니다.
$ search = ( new Search ())
-> registerModel ( User ::class, function ( ModelSearchAspect $ modelSearchAspect ) {
$ modelSearchAspect
-> addSearchableAttribute ( ' name ' ) // return results for partial matches on usernames
-> addExactSearchableAttribute ( ' email ' ) // only return results that exactly match the e-mail address
-> active ()
-> has ( ' posts ' )
-> with ( ' roles ' );
});
기본 모델만 검색 측면으로 등록하는 데 국한되지 않습니다. SearchAspect
클래스를 확장하여 사용자 정의 검색 측면을 쉽게 만들 수 있습니다.
외부 API를 검색하려면 다음 사용자 정의 검색 측면을 고려하십시오.
class OrderSearchAspect extends SearchAspect
{
public function getResults ( string $ term ): Collection
{
return OrderApi :: searchOrders ( $ term );
}
}
사용 방법은 다음과 같습니다.
$ searchResults = ( new Search ())
-> registerAspect ( OrderSearchAspect ::class)
-> search ( ' john ' );
검색을 수행하기 전에 limitAspectResults
호출하여 각 측면에서 반환되는 결과의 양을 제한할 수 있습니다.
$ searchResults = ( new Search ())
-> registerAspect ( BlogPostAspect ::class)
-> limitAspectResults ( 50 )
-> search ( ' How To ' );
다음은 검색 결과 렌더링에 대한 예입니다.
< h1 >Search</ h1 >
There are {{ $searchResults -> count () } } results.
@foreach ( $searchResults -> groupByType () as $type => $modelSearchResults )
< h2 > {{ $type } } </ h2 >
@foreach ( $modelSearchResults as $searchResult )
< ul >
< a href = " {{ $searchResult -> url } } " > {{ $searchResult -> title } } </ a >
</ ul >
@endforeach
@endforeach
모델 또는 사용자 정의 검색 측면에 $searchableType
공용 속성을 추가하여 $type
사용자 정의할 수 있습니다.
class BlogPost extends Model implements Searchable
{
public $ searchableType = ' custom named aspect ' ;
}
composer test
최근 변경된 사항에 대한 자세한 내용은 변경 로그를 참조하세요.
자세한 내용은 CONTRIBUTING을 참조하세요.
보안 관련 버그를 발견한 경우 이슈 트래커를 사용하는 대신 [email protected]로 메일을 보내주세요.
MIT 라이센스(MIT). 자세한 내용은 라이센스 파일을 참조하십시오.