@@ -112,26 +112,8 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
112
112
$ caseSensitive = false ;
113
113
}
114
114
115
- if (1 === \count ($ values )) {
116
- $ this ->addWhereByStrategy ($ strategy , $ queryBuilder , $ queryNameGenerator , $ alias , $ field , $ doctrineTypeField , $ values [0 ], $ caseSensitive );
117
-
118
- return ;
119
- }
120
-
121
- if (self ::STRATEGY_EXACT !== $ strategy ) {
122
- $ this ->logger ->notice ('Invalid filter ignored ' , [
123
- 'exception ' => new InvalidArgumentException (sprintf ('"%s" strategy selected for "%s" property, but only "%s" strategy supports multiple values ' , $ strategy , $ property , self ::STRATEGY_EXACT )),
124
- ]);
125
-
126
- return ;
127
- }
128
-
129
- $ wrapCase = $ this ->createWrapCase ($ caseSensitive );
130
115
$ valueParameter = $ queryNameGenerator ->generateParameterName ($ field );
131
-
132
- $ queryBuilder
133
- ->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' IN (:%s) ' , $ alias , $ field , $ valueParameter ))
134
- ->setParameter ($ valueParameter , $ caseSensitive ? $ values : array_map ('strtolower ' , $ values ));
116
+ $ this ->addWhereByStrategy ($ strategy , $ queryBuilder , $ alias , $ field , $ doctrineTypeField , $ values , $ caseSensitive , $ valueParameter );
135
117
}
136
118
137
119
// metadata doesn't have the field, nor an association on the field
@@ -155,63 +137,67 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
155
137
return ;
156
138
}
157
139
158
- $ association = $ field ;
159
- $ valueParameter = $ queryNameGenerator ->generateParameterName ($ association );
160
- if ($ metadata ->isCollectionValuedAssociation ($ association )) {
161
- $ associationAlias = QueryBuilderHelper::addJoinOnce ($ queryBuilder , $ queryNameGenerator , $ alias , $ association );
140
+ $ valueParameter = $ queryNameGenerator ->generateParameterName ($ field );
141
+ if ($ metadata ->isCollectionValuedAssociation ($ field )) {
142
+ $ associationAlias = QueryBuilderHelper::addJoinOnce ($ queryBuilder , $ queryNameGenerator , $ alias , $ field );
162
143
$ associationField = $ associationFieldIdentifier ;
163
144
} else {
164
145
$ associationAlias = $ alias ;
165
146
$ associationField = $ field ;
166
147
}
167
148
168
- if (1 === \count ($ values )) {
169
- $ queryBuilder
170
- ->andWhere (sprintf ('%s.%s = :%s ' , $ associationAlias , $ associationField , $ valueParameter ))
171
- ->setParameter ($ valueParameter , $ values [0 ], $ doctrineTypeField );
172
- } else {
173
- $ queryBuilder
174
- ->andWhere (sprintf ('%s.%s IN (:%s) ' , $ associationAlias , $ associationField , $ valueParameter ))
175
- ->setParameter ($ valueParameter , $ values , $ doctrineTypeField );
176
- }
149
+ $ this ->addWhereByStrategy (self ::STRATEGY_EXACT , $ queryBuilder , $ associationAlias , $ associationField , $ doctrineTypeField , $ values , $ caseSensitive , $ valueParameter );
177
150
}
178
151
179
152
/**
180
153
* Adds where clause according to the strategy.
181
154
*
182
155
* @throws InvalidArgumentException If strategy does not exist
183
156
*/
184
- protected function addWhereByStrategy (string $ strategy , QueryBuilder $ queryBuilder , QueryNameGeneratorInterface $ queryNameGenerator , string $ alias , string $ field , $ fieldType , $ value , bool $ caseSensitive )
157
+ protected function addWhereByStrategy (string $ strategy , QueryBuilder $ queryBuilder , string $ alias , string $ field , $ fieldType , array $ values , bool $ caseSensitive, string $ valueParameter )
185
158
{
186
159
$ wrapCase = $ this ->createWrapCase ($ caseSensitive );
187
- $ valueParameter = $ queryNameGenerator ->generateParameterName ($ field );
160
+
161
+ if (self ::STRATEGY_EXACT !== $ strategy && 1 !== \count ($ values )) {
162
+ $ this ->logger ->notice ('Invalid filter ignored ' , [
163
+ 'exception ' => new InvalidArgumentException (sprintf ('"%s" strategy selected for "%s" property, but only "%s" strategy supports multiple values ' , $ strategy , $ field , self ::STRATEGY_EXACT )),
164
+ ]);
165
+
166
+ return ;
167
+ }
188
168
189
169
switch ($ strategy ) {
190
170
case null :
191
171
case self ::STRATEGY_EXACT :
192
- $ queryBuilder
193
- ->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' = ' .$ wrapCase (':%s ' ), $ alias , $ field , $ valueParameter ))
194
- ->setParameter ($ valueParameter , $ value , $ fieldType );
172
+ if (1 === \count ($ values )) {
173
+ $ queryBuilder
174
+ ->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' = ' .$ wrapCase (':%s ' ), $ alias , $ field , $ valueParameter ))
175
+ ->setParameter ($ valueParameter , $ values [0 ], $ fieldType );
176
+ } else {
177
+ $ queryBuilder
178
+ ->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' IN (:%s) ' , $ alias , $ field , $ valueParameter ))
179
+ ->setParameter ($ valueParameter , $ caseSensitive ? $ values : array_map ('strtolower ' , $ values ));
180
+ }
195
181
break ;
196
182
case self ::STRATEGY_PARTIAL :
197
183
$ queryBuilder
198
184
->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' LIKE ' .$ wrapCase ('CONCAT( \'%% \', :%s, \'%% \') ' ), $ alias , $ field , $ valueParameter ))
199
- ->setParameter ($ valueParameter , $ value , $ fieldType );
185
+ ->setParameter ($ valueParameter , $ values [ 0 ] , $ fieldType );
200
186
break ;
201
187
case self ::STRATEGY_START :
202
188
$ queryBuilder
203
189
->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' LIKE ' .$ wrapCase ('CONCAT(:%s, \'%% \') ' ), $ alias , $ field , $ valueParameter ))
204
- ->setParameter ($ valueParameter , $ value , $ fieldType );
190
+ ->setParameter ($ valueParameter , $ values [ 0 ] , $ fieldType );
205
191
break ;
206
192
case self ::STRATEGY_END :
207
193
$ queryBuilder
208
194
->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' LIKE ' .$ wrapCase ('CONCAT( \'%% \', :%s) ' ), $ alias , $ field , $ valueParameter ))
209
- ->setParameter ($ valueParameter , $ value , $ fieldType );
195
+ ->setParameter ($ valueParameter , $ values [ 0 ] , $ fieldType );
210
196
break ;
211
197
case self ::STRATEGY_WORD_START :
212
198
$ queryBuilder
213
199
->andWhere (sprintf ($ wrapCase ('%1$s.%2$s ' ).' LIKE ' .$ wrapCase ('CONCAT(:%3$s, \'%% \') ' ).' OR ' .$ wrapCase ('%1$s.%2$s ' ).' LIKE ' .$ wrapCase ('CONCAT( \'%% \', :%3$s, \'%% \') ' ), $ alias , $ field , $ valueParameter ))
214
- ->setParameter ($ valueParameter , $ value , $ fieldType );
200
+ ->setParameter ($ valueParameter , $ values [ 0 ] , $ fieldType );
215
201
break ;
216
202
default :
217
203
throw new InvalidArgumentException (sprintf ('strategy %s does not exist. ' , $ strategy ));
0 commit comments