diff --git a/.gitignore b/.gitignore index 9adeb89..6f53677 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ /.phpunit.result.cache /.php_cs /.php_cs.cache +/.php-cs-fixer.cache /phpstan.neon diff --git a/composer.json b/composer.json index b7ca35f..0b9bec5 100644 --- a/composer.json +++ b/composer.json @@ -39,7 +39,7 @@ }, "require": { "php": "^7.3 || ^8.0", - "babenkoivan/elastic-adapter": "^2.1", + "babenkoivan/elastic-adapter": "^2.3", "babenkoivan/elastic-scout-driver": "^2.0" }, "require-dev": { diff --git a/docs/available-methods.md b/docs/available-methods.md index ece74ac..1ae6b22 100644 --- a/docs/available-methods.md +++ b/docs/available-methods.md @@ -25,7 +25,7 @@ This method can be used to [aggregate data](https://www.elastic.co/guide/en/elas based on a search query; ```php -$searchResult = Book::searchQuery($query) +$searchResult = Book::searchQuery() ->aggregate('max_price', [ 'max' => [ 'field' => 'price', @@ -37,7 +37,7 @@ $searchResult = Book::searchQuery($query) Alternatively you can use the `aggregateRaw` method: ```php -$searchResult = Book::searchQuery($query) +$searchResult = Book::searchQuery() ->aggregateRaw([ 'max_price' => [ 'max' => [ diff --git a/src/Builders/SearchRequestBuilder.php b/src/Builders/SearchRequestBuilder.php index cf313ab..f9e9e4b 100644 --- a/src/Builders/SearchRequestBuilder.php +++ b/src/Builders/SearchRequestBuilder.php @@ -19,7 +19,7 @@ class SearchRequestBuilder public const DEFAULT_PAGE_SIZE = 10; /** - * @var array + * @var array|null */ private $query; /** @@ -88,11 +88,11 @@ class SearchRequestBuilder private $indicesBoost = []; /** - * @param Closure|QueryBuilderInterface|array $query + * @param Closure|QueryBuilderInterface|array|null $query */ public function __construct($query, Model $model) { - $this->query = ParameterFactory::makeQuery($query); + $this->query = isset($query) ? ParameterFactory::makeQuery($query) : null; $this->modelScope = new ModelScope(get_class($model)); $this->engine = $model->searchableUsing(); } diff --git a/src/Searchable.php b/src/Searchable.php index d8ed359..098fc81 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -17,9 +17,9 @@ trait Searchable } /** - * @param Closure|QueryBuilderInterface|array $query + * @param Closure|QueryBuilderInterface|array|null $query */ - public static function searchQuery($query): SearchRequestBuilder + public static function searchQuery($query = null): SearchRequestBuilder { return new SearchRequestBuilder($query, new static()); } diff --git a/tests/Integration/Builders/SearchRequestBuilderTest.php b/tests/Integration/Builders/SearchRequestBuilderTest.php index 49a2a22..a25f273 100644 --- a/tests/Integration/Builders/SearchRequestBuilderTest.php +++ b/tests/Integration/Builders/SearchRequestBuilderTest.php @@ -358,10 +358,10 @@ public function test_search_request_with_raw_aggregate_can_be_built(): void ], ]; - $expected = (new SearchRequest($this->matchAllQuery)) + $expected = (new SearchRequest()) ->aggregations($aggregations); - $actual = (new SearchRequestBuilder($this->matchAllQuery, new Book())) + $actual = (new SearchRequestBuilder(null, new Book())) ->aggregateRaw($aggregations) ->buildSearchRequest(); diff --git a/tests/Integration/Queries/RawQueryTest.php b/tests/Integration/Queries/RawQueryTest.php index 4050c93..2693d7a 100644 --- a/tests/Integration/Queries/RawQueryTest.php +++ b/tests/Integration/Queries/RawQueryTest.php @@ -265,7 +265,7 @@ public function test_document_data_can_be_analyzed_using_raw_aggregations(): voi $minPrice = $source->min('price'); $maxPrice = $source->max('price'); - $found = Book::searchQuery(['match_all' => new stdClass()]) + $found = Book::searchQuery() ->aggregateRaw([ 'min_price' => [ 'min' => [ @@ -278,7 +278,6 @@ public function test_document_data_can_be_analyzed_using_raw_aggregations(): voi ], ], ]) - ->size(0) ->execute(); $this->assertEquals($minPrice, $found->aggregations()->get('min_price')->raw()['value']); @@ -291,13 +290,12 @@ public function test_document_data_can_be_analyzed_using_aggregations(): void ->state('belongs_to_author') ->create(); - $found = Book::searchQuery(['match_all' => new stdClass()]) + $found = Book::searchQuery() ->aggregate('max_price', [ 'max' => [ 'field' => 'price', ], ]) - ->size(0) ->execute(); $this->assertEquals($source->max('price'), $found->aggregations()->get('max_price')->raw()['value']);