@@ -92,11 +92,12 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
92
92
$ caseSensitive = true ;
93
93
$ metadata = $ this ->getNestedMetadata ($ resourceClass , $ associations );
94
94
95
- $ doctrineTypeField = $ this ->getDoctrineFieldType ($ property , $ resourceClass );
96
- $ values = array_map ([$ this , 'getIdFromValue ' ], $ values );
97
-
98
95
if ($ metadata ->hasField ($ field )) {
99
- if (!$ this ->hasValidValues ($ values , $ doctrineTypeField )) {
96
+ if ('id ' === $ field ) {
97
+ $ values = array_map ([$ this , 'getIdFromValue ' ], $ values );
98
+ }
99
+
100
+ if (!$ this ->hasValidValues ($ values , $ this ->getDoctrineFieldType ($ property , $ resourceClass ))) {
100
101
$ this ->logger ->notice ('Invalid filter ignored ' , [
101
102
'exception ' => new InvalidArgumentException (sprintf ('Values for field "%s" are not valid according to the doctrine type. ' , $ field )),
102
103
]);
@@ -113,7 +114,7 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
113
114
}
114
115
115
116
if (1 === \count ($ values )) {
116
- $ this ->addWhereByStrategy ($ strategy , $ queryBuilder , $ queryNameGenerator , $ alias , $ field , $ doctrineTypeField , $ values [0 ], $ caseSensitive );
117
+ $ this ->addWhereByStrategy ($ strategy , $ queryBuilder , $ queryNameGenerator , $ alias , $ field , $ values [0 ], $ caseSensitive );
117
118
118
119
return ;
119
120
}
@@ -139,7 +140,9 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
139
140
return ;
140
141
}
141
142
143
+ $ values = array_map ([$ this , 'getIdFromValue ' ], $ values );
142
144
$ associationFieldIdentifier = 'id ' ;
145
+ $ doctrineTypeField = $ this ->getDoctrineFieldType ($ property , $ resourceClass );
143
146
144
147
if (null !== $ this ->identifiersExtractor ) {
145
148
$ associationResourceClass = $ metadata ->getAssociationTargetClass ($ field );
@@ -168,11 +171,11 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
168
171
if (1 === \count ($ values )) {
169
172
$ queryBuilder
170
173
->andWhere (sprintf ('%s.%s = :%s ' , $ associationAlias , $ associationField , $ valueParameter ))
171
- ->setParameter ($ valueParameter , $ values [0 ], $ doctrineTypeField );
174
+ ->setParameter ($ valueParameter , $ values [0 ]);
172
175
} else {
173
176
$ queryBuilder
174
177
->andWhere (sprintf ('%s.%s IN (:%s) ' , $ associationAlias , $ associationField , $ valueParameter ))
175
- ->setParameter ($ valueParameter , $ values, $ doctrineTypeField );
178
+ ->setParameter ($ valueParameter , $ values );
176
179
}
177
180
}
178
181
@@ -181,7 +184,7 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
181
184
*
182
185
* @throws InvalidArgumentException If strategy does not exist
183
186
*/
184
- protected function addWhereByStrategy (string $ strategy , QueryBuilder $ queryBuilder , QueryNameGeneratorInterface $ queryNameGenerator , string $ alias , string $ field , $ fieldType , $ value , bool $ caseSensitive )
187
+ protected function addWhereByStrategy (string $ strategy , QueryBuilder $ queryBuilder , QueryNameGeneratorInterface $ queryNameGenerator , string $ alias , string $ field , $ value , bool $ caseSensitive )
185
188
{
186
189
$ wrapCase = $ this ->createWrapCase ($ caseSensitive );
187
190
$ valueParameter = $ queryNameGenerator ->generateParameterName ($ field );
@@ -191,27 +194,27 @@ protected function addWhereByStrategy(string $strategy, QueryBuilder $queryBuild
191
194
case self ::STRATEGY_EXACT :
192
195
$ queryBuilder
193
196
->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' = ' .$ wrapCase (':%s ' ), $ alias , $ field , $ valueParameter ))
194
- ->setParameter ($ valueParameter , $ value, $ fieldType );
197
+ ->setParameter ($ valueParameter , $ value );
195
198
break ;
196
199
case self ::STRATEGY_PARTIAL :
197
200
$ queryBuilder
198
201
->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' LIKE ' .$ wrapCase ('CONCAT( \'%% \', :%s, \'%% \') ' ), $ alias , $ field , $ valueParameter ))
199
- ->setParameter ($ valueParameter , $ value, $ fieldType );
202
+ ->setParameter ($ valueParameter , $ value );
200
203
break ;
201
204
case self ::STRATEGY_START :
202
205
$ queryBuilder
203
206
->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' LIKE ' .$ wrapCase ('CONCAT(:%s, \'%% \') ' ), $ alias , $ field , $ valueParameter ))
204
- ->setParameter ($ valueParameter , $ value, $ fieldType );
207
+ ->setParameter ($ valueParameter , $ value );
205
208
break ;
206
209
case self ::STRATEGY_END :
207
210
$ queryBuilder
208
211
->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' LIKE ' .$ wrapCase ('CONCAT( \'%% \', :%s) ' ), $ alias , $ field , $ valueParameter ))
209
- ->setParameter ($ valueParameter , $ value, $ fieldType );
212
+ ->setParameter ($ valueParameter , $ value );
210
213
break ;
211
214
case self ::STRATEGY_WORD_START :
212
215
$ queryBuilder
213
216
->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 );
217
+ ->setParameter ($ valueParameter , $ value );
215
218
break ;
216
219
default :
217
220
throw new InvalidArgumentException (sprintf ('strategy %s does not exist. ' , $ strategy ));
0 commit comments