Skip to content

Commit 3b89b7e

Browse files
committed
fix(doctrine): use abitrary index instead of value
1 parent 41bbad9 commit 3b89b7e

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

src/Doctrine/Orm/Filter/SearchFilter.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ protected function addWhereByStrategy(string $strategy, QueryBuilder $queryBuild
179179
$parameters = [];
180180
foreach ($values as $key => $value) {
181181
$keyValueParameter = sprintf('%s_%s', $valueParameter, $key);
182-
$parameters[$caseSensitive ? $value : strtolower($value)] = $keyValueParameter;
182+
$parameters[] = [$caseSensitive ? $value : strtolower($value), $keyValueParameter];
183183

184184
switch ($strategy) {
185185
case self::STRATEGY_PARTIAL:
@@ -212,7 +212,9 @@ protected function addWhereByStrategy(string $strategy, QueryBuilder $queryBuild
212212
}
213213

214214
$queryBuilder->andWhere($queryBuilder->expr()->orX(...$ors));
215-
array_walk($parameters, [$queryBuilder, 'setParameter']);
215+
foreach ($parameters as $parameter) {
216+
$queryBuilder->setParameter($parameter[1], $parameter[0]);
217+
}
216218
}
217219

218220
/**

tests/Doctrine/Common/Filter/SearchFilterTestTrait.php

+12
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,18 @@ private function provideApplyTestArguments(): array
297297
],
298298
],
299299
],
300+
'partial (multiple almost same values; case insensitive)' => [
301+
[
302+
'id' => null,
303+
'name' => 'ipartial',
304+
],
305+
[
306+
'name' => [
307+
'blue car',
308+
'Blue Car',
309+
],
310+
],
311+
],
300312
'start' => [
301313
[
302314
'id' => null,

tests/Doctrine/Odm/Filter/SearchFilterTest.php

+15
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,21 @@ public function provideApplyTestData(): array
426426
],
427427
$filterFactory,
428428
],
429+
'partial (multiple almost same values; case insensitive)' => [
430+
[
431+
[
432+
'$match' => [
433+
'name' => [
434+
'$in' => [
435+
new Regex('blue car', 'i'),
436+
new Regex('Blue Car', 'i'),
437+
],
438+
],
439+
],
440+
],
441+
],
442+
$filterFactory,
443+
],
429444
'start' => [
430445
[
431446
[

tests/Doctrine/Orm/Filter/SearchFilterTest.php

+8
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,14 @@ public function provideApplyTestData(): array
352352
],
353353
$filterFactory,
354354
],
355+
'partial (multiple almost same values; case insensitive)' => [
356+
sprintf('SELECT %s FROM %s %1$s WHERE LOWER(%1$s.name) LIKE LOWER(CONCAT(\'%%\', :name_p1_0, \'%%\')) OR LOWER(%1$s.name) LIKE LOWER(CONCAT(\'%%\', :name_p1_1, \'%%\'))', $this->alias, Dummy::class),
357+
[
358+
'name_p1_0' => 'blue car',
359+
'name_p1_1' => 'blue car',
360+
],
361+
$filterFactory,
362+
],
355363
'start' => [
356364
sprintf('SELECT %s FROM %s %1$s WHERE %1$s.name LIKE CONCAT(:name_p1_0, \'%%\')', $this->alias, Dummy::class),
357365
['name_p1_0' => 'partial'],

0 commit comments

Comments
 (0)