Skip to content

Commit 4563a91

Browse files
committed
Refactor query string handling and add tests
Refactored query string methods to accept flexible column and option arguments, updated internal naming for consistency, and improved the DslFactory to simplify query string payload construction. Removed legacy simple_query_string support and added the 'type' option for query string types. Added comprehensive tests for query string functionality, including field selection, options, and edge cases.
1 parent 410f459 commit 4563a91

File tree

7 files changed

+331
-28
lines changed

7 files changed

+331
-28
lines changed

src/Query/Builder.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1568,43 +1568,44 @@ public function orSearchNotFuzzyPrefix($query, mixed $columns = null, $options =
15681568
*
15691569
* @throws Exception
15701570
*/
1571-
public function searchQueryString(mixed $query, string|array $columns = '*', $options = []): self
1571+
public function searchQueryString(mixed $query, mixed $columns = null, $options = []): self
15721572
{
15731573
return $this->_buildQueryStringWheres($columns, $query, 'and', false, $options);
15741574
}
15751575

15761576
/**
15771577
* @throws Exception
15781578
*/
1579-
public function orSearchQueryString(mixed $query, string|array $columns = '*', $options = []): self
1579+
public function orSearchQueryString(mixed $query, mixed $columns = null, $options = []): self
15801580
{
15811581
return $this->_buildQueryStringWheres($columns, $query, 'or', false, $options);
15821582
}
15831583

15841584
/**
15851585
* @throws Exception
15861586
*/
1587-
public function searchNotQueryString(mixed $query, string|array $columns = '*', $options = []): self
1587+
public function searchNotQueryString(mixed $query, mixed $columns = null, $options = []): self
15881588
{
15891589
return $this->_buildQueryStringWheres($columns, $query, 'and', true, $options);
15901590
}
15911591

15921592
/**
15931593
* @throws Exception
15941594
*/
1595-
public function orSearchNotQueryString(mixed $query, string|array $columns = '*', $options = []): self
1595+
public function orSearchNotQueryString(mixed $query, mixed $columns = null, $options = []): self
15961596
{
15971597
return $this->_buildQueryStringWheres($columns, $query, 'or', true, $options);
15981598
}
15991599

16001600
/**
16011601
* @throws Exception
16021602
*/
1603-
private function _buildQueryStringWheres($column, $value, $boolean, $not, $options): self
1603+
private function _buildQueryStringWheres($columns, $value, $boolean, $not, $options): self
16041604
{
16051605
$type = 'QueryString';
1606+
[$columns, $options] = $this->extractSearch($columns, $options, 'querystring');
16061607
$options = $this->setOptions($options, 'querystring')->toArray();
1607-
$this->wheres[] = compact('column', 'value', 'type', 'boolean', 'not', 'options');
1608+
$this->wheres[] = compact('columns', 'value', 'type', 'boolean', 'not', 'options');
16081609

16091610
return $this;
16101611
}

src/Query/DSL/DslFactory.php

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -267,21 +267,16 @@ public static function functionScore(array $query, string $functionType, array $
267267
];
268268
}
269269

270-
public static function queryString(string|array $field, mixed $query, array $options = [])
270+
public static function queryString(mixed $query, mixed $fields, array $options = [])
271271
{
272-
$fields = is_array($field) ? $field : [$field];
273-
$type = 'query_string';
274-
if (! empty($options['simple_query_string'])) {
275-
$type = 'simple_query_string';
272+
$payload['query'] = (string) $query;
273+
if ($fields) {
274+
$payload['fields'] = is_array($fields) ? $fields : [$fields];
276275
}
277-
unset($options['simple_query_string']);
278276

279277
return [
280-
$type => array_merge(
281-
[
282-
'query' => (string) $query,
283-
'fields' => $fields,
284-
],
278+
'query_string' => array_merge(
279+
$payload,
285280
$options
286281
),
287282
];

src/Query/Grammar.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -723,11 +723,11 @@ protected function compileWhereSearch(Builder $builder, array $where): array
723723

724724
private function compileWhereQueryString(Builder $builder, array $where)
725725
{
726-
$fields = $where['column'];
726+
$fields = $where['columns'];
727727
$query = $where['value'];
728728
$options = $where['options'] ?? [];
729729

730-
return DslFactory::queryString($fields, $query, $options);
730+
return DslFactory::queryString($query, $fields, $options);
731731
}
732732

733733
/**

src/Query/ManagesOptions.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public function extractOptionsWithNot($type, $column, $value, $boolean, $not, $o
7575
return [$column, $value, $not, $boolean, $options];
7676
}
7777

78-
public function extractSearch($columns = null, $options = []): array
78+
public function extractSearch($columns = null, $options = [], $as = 'search'): array
7979
{
8080
if ($options) {
8181
return [$columns, $options];
@@ -87,7 +87,7 @@ public function extractSearch($columns = null, $options = []): array
8787
return [$columns, $options];
8888
}
8989
if (is_array($columns)) {
90-
$isOptions = $this->validatePossibleOptions($columns, 'search');
90+
$isOptions = $this->validatePossibleOptions($columns, $as);
9191
if ($isOptions) {
9292
$options = $columns;
9393
$columns = null;

src/Query/Options/QueryStringOptions.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* QueryStringOptions for Query String Queries.
77
*
88
*
9+
* @method $this type(string $value) //Options: best_fields, most_fields, cross_fields, phrase, phrase_prefix, bool_prefix
910
* @method $this allowLeadingWildcard(bool $value)
1011
* @method $this analyzeWildcard(bool $value)
1112
* @method $this analyzer(string $analyzer)
@@ -24,13 +25,13 @@
2425
* @method $this quoteFieldSuffix(string $value)
2526
* @method $this rewrite(string $value)
2627
* @method $this timeZone(string $value)
27-
* @method $this simpleQueryString(bool $value)
2828
*/
2929
class QueryStringOptions extends QueryOptions
3030
{
3131
public function allowedOptions(): array
3232
{
3333
return [
34+
'type',
3435
'allow_leading_wildcard',
3536
'analyze_wildcard',
3637
'analyzer',
@@ -51,12 +52,6 @@ public function allowedOptions(): array
5152
'quote_field_suffix',
5253
'rewrite',
5354
'time_zone',
54-
'simple_query_string',
5555
];
5656
}
57-
58-
public function asSimple()
59-
{
60-
$this->simpleQueryString(true);
61-
}
6257
}

tests/Models/Product.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public static function executeSchema()
2525

2626
$schema->dropIfExists('products');
2727
$schema->create('products', function (Blueprint $table) {
28+
$table->integer('price');
2829
$table->date('created_at');
2930
$table->date('updated_at');
3031
});

0 commit comments

Comments
 (0)