|
|
@@ -37,22 +37,21 @@ class ArrayFieldFilter extends AbstractFilter
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- $parameterName = $queryNameGenerator->generateParameterName($property);
|
|
|
- $valueArray = json_decode($value, true);
|
|
|
+ // Vérifier si la valeur est déjà un tableau ou un JSON encodé
|
|
|
+ $values = json_decode($value, true);
|
|
|
|
|
|
- if (is_array($valueArray)) {
|
|
|
- $queryBuilder->andWhere($queryBuilder->expr()->orX(
|
|
|
- ...array_map(function ($val) use ($queryBuilder, $property, $parameterName) {
|
|
|
- return $queryBuilder->expr()->like(sprintf('o.%s', $property), ':'.$parameterName);
|
|
|
- }, $valueArray)
|
|
|
- ));
|
|
|
- foreach ($valueArray as $key => $val) {
|
|
|
- $queryBuilder->setParameter($parameterName, '%'.$val.'%');
|
|
|
- }
|
|
|
- } else {
|
|
|
- $queryBuilder->andWhere(sprintf('o.%s LIKE :%s', $property, $parameterName))
|
|
|
- ->setParameter($parameterName, '%'.$value.'%');
|
|
|
+ // Si json_decode échoue ou si la valeur n'est pas un tableau, traiter comme une chaîne simple
|
|
|
+ if (JSON_ERROR_NONE !== json_last_error() || !is_array($values)) {
|
|
|
+ $values = [$value];
|
|
|
}
|
|
|
+
|
|
|
+ $orX = $queryBuilder->expr()->orX();
|
|
|
+ foreach ($values as $index => $val) {
|
|
|
+ $parameterName = $queryNameGenerator->generateParameterName($property.$index); // Générer un nom de paramètre unique
|
|
|
+ $orX->add($queryBuilder->expr()->like(sprintf('o.%s', $property), ':'.$parameterName));
|
|
|
+ $queryBuilder->setParameter($parameterName, '%'.$val.'%');
|
|
|
+ }
|
|
|
+ $queryBuilder->andWhere($orX);
|
|
|
}
|
|
|
|
|
|
/**
|