Skip to content

Commit 7d51bf7

Browse files
authored
Merge pull request #747 from teohhanhui/searchfilter-case-invalues
Fix SearchFilter case sensitivity for IN values
2 parents 1484bbb + ffec859 commit 7d51bf7

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

src/Bridge/Doctrine/Orm/Filter/SearchFilter.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,12 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
189189
return;
190190
}
191191

192+
$wrapCase = $this->createWrapCase($caseSensitive);
192193
$valueParameter = $queryNameGenerator->generateParameterName($field);
193194

194195
$queryBuilder
195-
->andWhere(sprintf('%s.%s IN (:%s)', $alias, $field, $valueParameter))
196-
->setParameter($valueParameter, $caseSensitive ? array_map('strtolower', $values) : $values);
196+
->andWhere(sprintf($wrapCase('%s.%s').' IN (:%s)', $alias, $field, $valueParameter))
197+
->setParameter($valueParameter, $caseSensitive ? $values : array_map('strtolower', $values));
197198
}
198199

199200
// metadata doesn't have the field, nor an association on the field

tests/Bridge/Doctrine/Orm/Filter/SearchFilterTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,48 @@ public function provideApplyTestData() : array
422422
],
423423
],
424424
],
425+
'exact (multiple values)' => [
426+
[
427+
'id' => null,
428+
'name' => 'exact',
429+
],
430+
[
431+
'name' => [
432+
'CaSE',
433+
'SENSitive',
434+
],
435+
],
436+
[
437+
'dql' => sprintf('SELECT o FROM %s o WHERE o.name IN (:name_p1)', Dummy::class),
438+
'parameters' => [
439+
'name_p1' => [
440+
'CaSE',
441+
'SENSitive',
442+
],
443+
],
444+
],
445+
],
446+
'exact (multiple values; case insensitive)' => [
447+
[
448+
'id' => null,
449+
'name' => 'iexact',
450+
],
451+
[
452+
'name' => [
453+
'CaSE',
454+
'inSENSitive',
455+
],
456+
],
457+
[
458+
'dql' => sprintf('SELECT o FROM %s o WHERE LOWER(o.name) IN (:name_p1)', Dummy::class),
459+
'parameters' => [
460+
'name_p1' => [
461+
'case',
462+
'insensitive',
463+
],
464+
],
465+
],
466+
],
425467
'invalid property' => [
426468
[
427469
'id' => null,

0 commit comments

Comments
 (0)