Skip to content

Commit 52b771c

Browse files
authored
Merge pull request #3520 from soyuka/revert-3331
Revert "Passing custom doctrine type to addWhereByStrategy"
2 parents 5a7c2e4 + a9e94fb commit 52b771c

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

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

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,12 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
9292
$caseSensitive = true;
9393
$metadata = $this->getNestedMetadata($resourceClass, $associations);
9494

95-
$doctrineTypeField = $this->getDoctrineFieldType($property, $resourceClass);
96-
$values = array_map([$this, 'getIdFromValue'], $values);
97-
9895
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))) {
100101
$this->logger->notice('Invalid filter ignored', [
101102
'exception' => new InvalidArgumentException(sprintf('Values for field "%s" are not valid according to the doctrine type.', $field)),
102103
]);
@@ -113,7 +114,7 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
113114
}
114115

115116
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);
117118

118119
return;
119120
}
@@ -139,7 +140,9 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
139140
return;
140141
}
141142

143+
$values = array_map([$this, 'getIdFromValue'], $values);
142144
$associationFieldIdentifier = 'id';
145+
$doctrineTypeField = $this->getDoctrineFieldType($property, $resourceClass);
143146

144147
if (null !== $this->identifiersExtractor) {
145148
$associationResourceClass = $metadata->getAssociationTargetClass($field);
@@ -168,11 +171,11 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
168171
if (1 === \count($values)) {
169172
$queryBuilder
170173
->andWhere(sprintf('%s.%s = :%s', $associationAlias, $associationField, $valueParameter))
171-
->setParameter($valueParameter, $values[0], $doctrineTypeField);
174+
->setParameter($valueParameter, $values[0]);
172175
} else {
173176
$queryBuilder
174177
->andWhere(sprintf('%s.%s IN (:%s)', $associationAlias, $associationField, $valueParameter))
175-
->setParameter($valueParameter, $values, $doctrineTypeField);
178+
->setParameter($valueParameter, $values);
176179
}
177180
}
178181

@@ -181,7 +184,7 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
181184
*
182185
* @throws InvalidArgumentException If strategy does not exist
183186
*/
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)
185188
{
186189
$wrapCase = $this->createWrapCase($caseSensitive);
187190
$valueParameter = $queryNameGenerator->generateParameterName($field);
@@ -191,27 +194,27 @@ protected function addWhereByStrategy(string $strategy, QueryBuilder $queryBuild
191194
case self::STRATEGY_EXACT:
192195
$queryBuilder
193196
->andWhere(sprintf($wrapCase('%s.%s').' = '.$wrapCase(':%s'), $alias, $field, $valueParameter))
194-
->setParameter($valueParameter, $value, $fieldType);
197+
->setParameter($valueParameter, $value);
195198
break;
196199
case self::STRATEGY_PARTIAL:
197200
$queryBuilder
198201
->andWhere(sprintf($wrapCase('%s.%s').' LIKE '.$wrapCase('CONCAT(\'%%\', :%s, \'%%\')'), $alias, $field, $valueParameter))
199-
->setParameter($valueParameter, $value, $fieldType);
202+
->setParameter($valueParameter, $value);
200203
break;
201204
case self::STRATEGY_START:
202205
$queryBuilder
203206
->andWhere(sprintf($wrapCase('%s.%s').' LIKE '.$wrapCase('CONCAT(:%s, \'%%\')'), $alias, $field, $valueParameter))
204-
->setParameter($valueParameter, $value, $fieldType);
207+
->setParameter($valueParameter, $value);
205208
break;
206209
case self::STRATEGY_END:
207210
$queryBuilder
208211
->andWhere(sprintf($wrapCase('%s.%s').' LIKE '.$wrapCase('CONCAT(\'%%\', :%s)'), $alias, $field, $valueParameter))
209-
->setParameter($valueParameter, $value, $fieldType);
212+
->setParameter($valueParameter, $value);
210213
break;
211214
case self::STRATEGY_WORD_START:
212215
$queryBuilder
213216
->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);
215218
break;
216219
default:
217220
throw new InvalidArgumentException(sprintf('strategy %s does not exist.', $strategy));

0 commit comments

Comments
 (0)