@@ -31,11 +31,22 @@ final class PartialSearchFilter implements FilterInterface, OpenApiParameterFilt
3131 public function apply (QueryBuilder $ queryBuilder , QueryNameGeneratorInterface $ queryNameGenerator , string $ resourceClass , ?Operation $ operation = null , array $ context = []): void
3232 {
3333 $ parameter = $ context ['parameter ' ];
34- $ values = (array ) $ parameter ->getValue ();
35-
3634 $ property = $ parameter ->getProperty ();
3735 $ alias = $ queryBuilder ->getRootAliases ()[0 ];
3836 $ field = $ alias .'. ' .$ property ;
37+ $ parameterName = $ queryNameGenerator ->generateParameterName ($ property );
38+ $ values = $ parameter ->getValue ();
39+
40+ if (!is_iterable ($ values )) {
41+ $ queryBuilder ->setParameter ($ parameterName , '% ' .strtolower ($ values ).'% ' );
42+
43+ $ queryBuilder ->{$ context ['whereClause ' ] ?? 'andWhere ' }($ queryBuilder ->expr ()->like (
44+ 'LOWER( ' .$ field .') ' ,
45+ ': ' .$ parameterName
46+ ));
47+
48+ return ;
49+ }
3950
4051 $ likeExpressions = [];
4152 foreach ($ values as $ val ) {
@@ -44,16 +55,11 @@ public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $q
4455 'LOWER( ' .$ field .') ' ,
4556 ': ' .$ parameterName
4657 );
47-
4858 $ queryBuilder ->setParameter ($ parameterName , '% ' .strtolower ($ val ).'% ' );
4959 }
5060
51- if (1 === \count ($ likeExpressions )) {
52- $ queryBuilder ->{$ context ['whereClause ' ] ?? 'andWhere ' }($ likeExpressions [0 ]);
53- } else {
54- $ queryBuilder ->{$ context ['whereClause ' ] ?? 'andWhere ' }(
55- $ queryBuilder ->expr ()->orX (...$ likeExpressions )
56- );
57- }
61+ $ queryBuilder ->{$ context ['whereClause ' ] ?? 'andWhere ' }(
62+ $ queryBuilder ->expr ()->orX (...$ likeExpressions )
63+ );
5864 }
5965}
0 commit comments