이 Laravel 패키지를 사용하면 여러 Eloquent 모델을 검색할 수 있습니다. 정렬, 페이지 매김, 범위가 지정된 쿼리, 열성 로드 관계 및 단일 또는 다중 열 검색을 지원합니다.
❤️ 우리는 Laravel 패키지를 개발하고 무료로 제공함으로써 커뮤니티를 자랑스럽게 지원합니다. 이 패키지가 시간을 절약해 주거나 전문적으로 의존하고 있다면 유지 관리 및 개발 후원을 고려하고 최신 프리미엄 패키지인 Inertia Table을 확인해 보세요. 문제와 끌어오기 요청을 추적하는 데는 시간이 걸리지만 기꺼이 도와드리겠습니다!
이 패키지의 배경에 대해 더 자세히 알고 싶다면 블로그 게시물을 읽어보세요.
작곡가를 통해 패키지를 설치할 수 있습니다.
composer require protonemedia/laravel-cross-eloquent-search
get
메소드의 이름이 search
로 변경되었습니다.addWhen
메소드는 when
위해 제거되었습니다.updated_at
된 열을 기준으로 정렬됩니다. 타임스탬프를 사용하지 않으면 이제 기본적으로 기본 키가 사용됩니다. startWithWildcard
메소드의 이름이 beginWithWildcard
로 변경되었습니다.getUpdatedAtColumn
메소드에 의해 평가됩니다. 이전에는 updated_at
에 하드 코딩되었습니다. 여전히 다른 열을 사용하여 주문할 수 있습니다.allowEmptySearchQuery
메서드 및 EmptySearchQueryException
클래스가 제거되었지만 여전히 검색하지 않고도 결과를 얻을 수 있습니다. 검색할 모델을 하나 이상 추가하여 검색 쿼리를 시작하세요. 모델의 클래스 이름과 검색하려는 열을 사용하여 add
메소드를 호출하세요. 그런 다음 검색어로 search
메소드를 호출하면 결과와 함께 IlluminateDatabaseEloquentCollection
인스턴스를 얻게 됩니다.
결과는 기본적으로 업데이트된 열을 기준으로 오름차순으로 정렬됩니다. 대부분의 경우 이 열은 updated_at
입니다. 모델의 UPDATED_AT
상수를 사용자 정의했거나 getUpdatedAtColumn
메소드를 덮어쓴 경우 이 패키지는 사용자 정의된 열을 사용합니다. 타임스탬프를 전혀 사용하지 않으면 기본적으로 기본 키가 사용됩니다. 물론 다른 열을 기준으로 주문할 수도 있습니다.
use ProtoneMedia LaravelCrossEloquentSearch Search ;
$ results = Search :: add ( Post ::class, ' title ' )
-> add ( Video ::class, ' title ' )
-> search ( ' howto ' );
들여쓰기에 관심이 있다면 선택적으로 파사드에 new
메소드를 사용할 수 있습니다:
Search :: new ()
-> add ( Post ::class, ' title ' )
-> add ( Video ::class, ' title ' )
-> search ( ' howto ' );
다른 조건에 따라 특정 절을 적용하는 when
메소드도 있습니다:
Search :: new ()
-> when ( $ user -> isVerified (), fn( $ search ) => $ search -> add ( Post ::class, ' title ' ))
-> when ( $ user -> isAdmin (), fn( $ search ) => $ search -> add ( Video ::class, ' title ' ))
-> search ( ' howto ' );
기본적으로 검색어를 분할하고 각 키워드는 부분 일치를 수행하기 위해 와일드카드 기호를 얻습니다. 실제로 이는 검색어 apple ios
입력하면 apple%
및 ios%
가 검색된다는 의미입니다. 와일드카드 기호도 함께 시작하려면 beginWithWildcard
메서드를 호출하면 됩니다. 결과적으로 %apple%
및 %ios%
됩니다.
Search :: add ( Post ::class, ' title ' )
-> add ( Video ::class, ' title ' )
-> beginWithWildcard ()
-> search ( ' os ' );
참고: 이 패키지의 이전 버전에서는 이 메서드를 startWithWildcard()
라고 했습니다.
용어에 와일드카드가 추가되는 동작을 비활성화하려면 false
로 endWithWildcard
메서드를 호출해야 합니다.
Search :: add ( Post ::class, ' title ' )
-> add ( Video ::class, ' title ' )
-> beginWithWildcard ()
-> endWithWildcard ( false )
-> search ( ' os ' );
다중 단어 검색은 기본적으로 지원됩니다. 문구를 큰따옴표로 묶으면 됩니다.
Search :: add ( Post ::class, ' title ' )
-> add ( Video ::class, ' title ' )
-> search ( ' "macos big sur" ' );
dontParseTerm
메소드를 호출하여 검색어 구문 분석을 비활성화할 수 있으며, 이는 큰따옴표를 사용하는 것과 동일한 결과를 제공합니다.
Search :: add ( Post ::class, ' title ' )
-> add ( Video ::class, ' title ' )
-> dontParseTerm ()
-> search ( ' macos big sur ' );
다른 열을 기준으로 결과를 정렬하려면 해당 열을 add
메소드에 세 번째 매개변수로 전달할 수 있습니다. 결과를 내림차순으로 정렬하려면 orderByDesc
메소드를 호출하십시오.
Search :: add ( Post ::class, ' title ' , ' published_at ' )
-> add ( Video ::class, ' title ' , ' released_at ' )
-> orderByDesc ()
-> search ( ' learn ' );
orderByRelevance
메소드를 호출하여 검색어 발생 횟수를 기준으로 결과를 정렬할 수 있습니다. 다음 두 문장을 상상해 보세요.
Apple iPad 를 검색하면 검색어와 일치하는 항목이 더 많기 때문에 두 번째 문장이 먼저 나타납니다.
Search :: add ( Post ::class, ' title ' )
-> beginWithWildcard ()
-> orderByRelevance ()
-> search ( ' Apple iPad ' );
(중첩된) 관계를 검색하는 경우 관련성에 따른 정렬이 지원되지 않습니다 .
모델 유형별로 결과를 정렬하려면 원하는 모델 순서를 지정하여 orderByModel
메서드를 사용할 수 있습니다.
Search :: new ()
-> add ( Comment ::class, [ ' body ' ])
-> add ( Post ::class, [ ' title ' ])
-> add ( Video ::class, [ ' title ' , ' description ' ])
-> orderByModel ([
Post ::class, Video ::class, Comment ::class,
])
-> search ( ' Artisan School ' );
결과에 페이지를 매기는 것이 좋습니다. search
메소드 전에 paginate
메소드를 호출하면 결과적으로 IlluminateContractsPaginationLengthAwarePaginator
인스턴스를 얻게 됩니다. paginate
메소드는 페이지 표시기를 사용자 정의하기 위해 세 가지(선택적) 매개변수를 사용합니다. 이러한 인수는 Laravel의 데이터베이스 페이지네이터와 동일합니다.
Search :: add ( Post ::class, ' title ' )
-> add ( Video ::class, ' title ' )
-> paginate ()
// or
-> paginate ( $ perPage = 15 , $ pageName = ' page ' , $ page = 1 )
-> search ( ' build ' );
간단한 페이지 매김을 사용할 수도 있습니다. 그러면 길이를 인식하지 못하는 IlluminateContractsPaginationPaginator
인스턴스가 반환됩니다.
Search :: add ( Post ::class, ' title ' )
-> add ( Video ::class, ' title ' )
-> simplePaginate ()
// or
-> simplePaginate ( $ perPage = 15 , $ pageName = ' page ' , $ page = 1 )
-> search ( ' build ' );
클래스 이름 대신 Eloquent 쿼리 빌더의 인스턴스를 add
메소드에 전달할 수도 있습니다. 이를 통해 각 모델에 제약 조건을 추가할 수 있습니다.
Search :: add ( Post :: published (), ' title ' )
-> add ( Video :: where ( ' views ' , ' > ' , 2500 ), ' title ' )
-> search ( ' compile ' );
열 배열을 두 번째 인수로 전달하여 여러 열을 검색할 수 있습니다.
Search :: add ( Post ::class, [ ' title ' , ' body ' ])
-> add ( Video ::class, [ ' title ' , ' subtitle ' ])
-> search ( ' eloquent ' );
점 표기법을 사용하여 (중첩된) 관계를 검색할 수 있습니다.
Search :: add ( Post ::class, [ ' comments.body ' ])
-> add ( Video ::class, [ ' posts.user.biography ' ])
-> search ( ' solution ' );
addFullText
메소드를 사용하여 MySQL의 전체 텍스트 검색을 사용할 수 있습니다. 단일 또는 여러 열을 검색할 수 있으며(전체 텍스트 인덱스 사용), 모드 지정 등의 옵션 집합을 지정할 수 있습니다. 하나의 쿼리에 일반 검색과 전체 텍스트 검색을 혼합할 수도 있습니다.
Search :: new ()
-> add ( Post ::class, ' title ' )
-> addFullText ( Video ::class, ' title ' , [ ' mode ' => ' boolean ' ])
-> addFullText ( Blog ::class, [ ' title ' , ' subtitle ' , ' body ' ], [ ' mode ' => ' boolean ' ])
-> search ( ' framework -css ' );
관계를 검색하려면 배열 키에 관계가 포함되고 값은 열 배열인 배열을 전달해야 합니다.
Search :: new ()
-> addFullText ( Page ::class, [
' posts ' => [ ' title ' , ' body ' ],
' sections ' => [ ' title ' , ' subtitle ' , ' body ' ],
])
-> search ( ' framework -css ' );
MySQL에는 soundex 알고리즘이 내장되어 있으므로 거의 동일하게 들리는 용어를 검색할 수 있습니다. soundsLike
메소드를 호출하여 이 기능을 사용할 수 있습니다.
Search :: new ()
-> add ( Post ::class, ' framework ' )
-> add ( Video ::class, ' framework ' )
-> soundsLike ()
-> search ( ' larafel ' );
여기서는 설명할 내용이 많지 않지만 이 기능도 지원됩니다. :)
Search :: add ( Post :: with ( ' comments ' ), ' title ' )
-> add ( Video :: with ( ' likes ' ), ' title ' )
-> search ( ' guitar ' );
용어 없이 또는 빈 용어를 사용하여 search
메서드를 호출합니다. 이 경우 add
메소드의 두 번째 인수를 삭제할 수 있습니다. orderBy
메소드를 사용하면 정렬 기준(이전의 세 번째 인수)으로 열을 설정할 수 있습니다.
Search :: add ( Post ::class)
-> orderBy ( ' published_at ' )
-> add ( Video ::class)
-> orderBy ( ' released_at ' )
-> search ();
count
메소드를 사용하여 결과 수를 계산할 수 있습니다.
Search :: add ( Post :: published (), ' title ' )
-> add ( Video :: where ( ' views ' , ' > ' , 2500 ), ' title ' )
-> count ( ' compile ' );
includeModelType
사용하여 검색 결과에 모델 유형을 추가할 수 있습니다.
Search :: add ( Post ::class, ' title ' )
-> add ( Video ::class, ' title ' )
-> includeModelType ()
-> paginate ()
-> search ( ' foo ' );
// Example result with model identifier.
{
" current_page ": 1 ,
" data": [
{
" id " : 1 ,
" video_id " : null ,
" title " : " foo " ,
" published_at " : null ,
" created_at " : " 2021-12-03T09:39:10.000000Z " ,
" updated_at " : " 2021-12-03T09:39:10.000000Z " ,
" type " : " Post " ,
},
{
"id": 1 ,
"title": "foo",
"subtitle": null ,
"published_at": null ,
"created_at": " 2021-12-03T09:39:10.000000Z " ,
" updated_at ": " 2021 - 12 - 03 T09 : 39 : 10.000000 Z ",
" type ": " Video ",
},
],
...
}
기본적으로 type
키를 사용하지만 키를 메소드에 전달하여 이를 사용자 정의할 수 있습니다.
기본 클래스 기본 이름을 재정의하기 위해 공용 메서드 searchType()
모델에 추가하여 type
값을 사용자 정의할 수도 있습니다.
class Video extends Model
{
public function searchType ()
{
return ' awesome_video ' ;
}
}
// Example result with searchType() method.
{
" current_page ": 1 ,
" data": [
{
" id " : 1 ,
" video_id " : null ,
" title " : " foo " ,
" published_at " : null ,
" created_at " : " 2021-12-03T09:39:10.000000Z " ,
" updated_at " : " 2021-12-03T09:39:10.000000Z " ,
" type " : " awesome_video " ,
}
],
...
parseTerms
메소드와 함께 파서를 사용할 수 있습니다:
$ terms = Search :: parseTerms ( ' drums guitar ' );
콜백을 두 번째 인수로 전달하여 각 용어를 반복할 수도 있습니다.
Search :: parseTerms ( ' drums guitar ' , function ( $ term , $ key ) {
//
});
composer test
최근 변경된 사항에 대한 자세한 내용은 CHANGELOG를 참조하세요.
자세한 내용은 CONTRIBUTING을 참조하세요.
Inertia Table
: 쿼리 빌더가 내장된 Inertia.js용 최종 테이블입니다.Laravel Blade On Demand
: 메모리에서 블레이드 템플릿을 컴파일하는 Laravel 패키지입니다.Laravel Eloquent Scope as Select
: PHP에서 Eloquent 쿼리 범위와 제약 조건의 중복을 중지합니다. 이 패키지를 사용하면 쿼리 범위와 제약 조건을 하위 쿼리로 추가하여 재사용할 수 있습니다.Laravel FFMpeg
: 이 패키지는 Laravel용 FFmpeg와의 통합을 제공합니다. 파일 저장은 Laravel의 파일 시스템에 의해 처리됩니다.Laravel MinIO Testing Tools
: MinIO S3 서버에 대해 테스트를 실행합니다.Laravel Mixins
: Laravel의 유용한 기능 모음입니다.Laravel Paddle
: 웹후크/이벤트를 지원하는 Laravel용 Paddle.com API 통합입니다.Laravel Task Runner
: 블레이드 구성요소와 같은 쉘 스크립트를 작성하고 로컬 또는 원격 서버에서 실행합니다.Laravel Verify New Email
: 이 패키지는 새 이메일 주소 확인에 대한 지원을 추가합니다. 사용자가 이메일 주소를 업데이트하면 새 이메일 주소가 확인될 때까지 이전 주소를 대체하지 않습니다.Laravel XSS Protection
: XSS(교차 사이트 스크립팅)로부터 앱을 보호하는 Laravel 미들웨어입니다. 요청 입력을 삭제하고 블레이드 에코 문을 삭제할 수 있습니다.보안 관련 문제를 발견한 경우 문제 추적기를 사용하는 대신 [email protected]로 이메일을 보내주세요.
MIT 라이센스(MIT). 자세한 내용은 라이센스 파일을 참조하십시오.
이 패키지는 트리웨어입니다. 제작에 사용하신다면, 저희 작업에 대한 감사의 표시로 전 세계에 나무 한 그루를 사주시기 바랍니다. Treeware 숲에 기여함으로써 지역 가족을 위한 일자리를 창출하고 야생동물 서식지를 복원하게 됩니다.