2020use ApiPlatform \Metadata \Operation ;
2121use Doctrine \ORM \QueryBuilder ;
2222
23- use function is_iterable ;
24- use function strtolower ;
25-
2623/**
2724 * @author Vincent Amstoutz <[email protected] > 2825 * @author Ré Schopmeijer <[email protected] > @@ -32,52 +29,40 @@ final class PartialSearchFilter implements FilterInterface, OpenApiParameterFilt
3229 use BackwardCompatibleFilterDescriptionTrait;
3330 use OpenApiFilterTrait;
3431
35- public function apply (
36- QueryBuilder $ queryBuilder ,
37- QueryNameGeneratorInterface $ queryNameGenerator ,
38- string $ resourceClass ,
39- ?Operation $ operation = null ,
40- array $ context = [],
41- ): void {
42- $ parameter = $ context ['parameter ' ];
43- $ alias = $ queryBuilder ->getRootAliases ()[0 ];
32+ public function apply (QueryBuilder $ queryBuilder , QueryNameGeneratorInterface $ queryNameGenerator , string $ resourceClass , ?Operation $ operation = null , array $ context = []): void
33+ {
34+ $ parameter = $ context ['parameter ' ];
35+ $ alias = $ queryBuilder ->getRootAliases ()[0 ];
4436 $ properties = $ parameter ->getProperties () ?? [$ parameter ->getProperty ()];
4537 foreach ($ properties as $ property ) {
46- $ field = $ alias . '. ' . $ property ;
38+ $ field = $ alias. '. ' . $ property ;
4739 $ parameterName = $ queryNameGenerator ->generateParameterName ($ property );
48- $ values = $ parameter ->getValue ();
40+ $ values = $ parameter ->getValue ();
4941
5042 if (!is_iterable ($ values )) {
51- $ queryBuilder ->setParameter ($ parameterName , '% ' . strtolower ($ values ) . '% ' );
43+ $ queryBuilder ->setParameter ($ parameterName , '% ' . strtolower ($ values ). '% ' );
5244
53- $ queryBuilder ->{$ context ['whereClause ' ] ?? 'andWhere ' }(
54- $ queryBuilder
55- ->expr ()
56- ->like (
57- 'LOWER( ' . $ field . ') ' ,
58- ': ' . $ parameterName ,
59- ),
60- );
61- } else {
62- $ likeExpressions = [];
63- foreach ($ values as $ val ) {
64- $ parameterName = $ queryNameGenerator ->generateParameterName ($ property );
65- $ likeExpressions [] = $ queryBuilder
66- ->expr ()
67- ->like (
68- 'LOWER( ' . $ field . ') ' ,
69- ': ' . $ parameterName ,
70- )
71- ;
72- $ queryBuilder ->setParameter ($ parameterName , '% ' . strtolower ($ val ) . '% ' );
73- }
45+ $ queryBuilder ->{$ context ['whereClause ' ] ?? 'andWhere ' }($ queryBuilder ->expr ()->like (
46+ 'LOWER( ' .$ field .') ' ,
47+ ': ' .$ parameterName ,
48+ ));
7449
75- $ queryBuilder ->{$ context ['whereClause ' ] ?? 'andWhere ' }(
76- $ queryBuilder
77- ->expr ()
78- ->orX (...$ likeExpressions ),
50+ continue ;
51+ }
52+
53+ $ likeExpressions = [];
54+ foreach ($ values as $ val ) {
55+ $ parameterName = $ queryNameGenerator ->generateParameterName ($ property );
56+ $ likeExpressions [] = $ queryBuilder ->expr ()->like (
57+ 'LOWER( ' .$ field .') ' ,
58+ ': ' .$ parameterName ,
7959 );
60+ $ queryBuilder ->setParameter ($ parameterName , '% ' .strtolower ($ val ).'% ' );
8061 }
62+
63+ $ queryBuilder ->{$ context ['whereClause ' ] ?? 'andWhere ' }(
64+ $ queryBuilder ->expr ()->orX (...$ likeExpressions ),
65+ );
8166 }
8267 }
8368}
0 commit comments