protected function addWhere(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, $alias, $field, $operator, $value)
{
$valueParameter = $queryNameGenerator->generateParameterName($field);
switch ($operator) {
case self::PARAMETER_BETWEEN:
$rangeValue = explode('..', $value);
if (2 !== count($rangeValue)) {
$this->logger->notice('Invalid filter ignored', ['exception' => new InvalidArgumentException(sprintf('Invalid format for "[%s]", expected "<min>..<max>"', $operator))]);
return;
}
if (!is_numeric($rangeValue[0]) || !is_numeric($rangeValue[1])) {
$this->logger->notice('Invalid filter ignored', ['exception' => new InvalidArgumentException(sprintf('Invalid values for "[%s]" range, expected numbers', $operator))]);
return;
}
$queryBuilder->andWhere(sprintf('%1$s.%2$s BETWEEN :%3$s_1 AND :%3$s_2', $alias, $field, $valueParameter))->setParameter(sprintf('%s_1', $valueParameter), $rangeValue[0])->setParameter(sprintf('%s_2', $valueParameter), $rangeValue[1]);
break;
case self::PARAMETER_GREATER_THAN:
if (!is_numeric($value)) {
$this->logger->notice('Invalid filter ignored', ['exception' => new InvalidArgumentException(sprintf('Invalid value for "[%s]", expected number', $operator))]);
return;
}
$queryBuilder->andWhere(sprintf('%s.%s > :%s', $alias, $field, $valueParameter))->setParameter($valueParameter, $value);
break;
case self::PARAMETER_GREATER_THAN_OR_EQUAL:
if (!is_numeric($value)) {
$this->logger->notice('Invalid filter ignored', ['exception' => new InvalidArgumentException(sprintf('Invalid value for "[%s]", expected number', $operator))]);
return;
}
$queryBuilder->andWhere(sprintf('%s.%s >= :%s', $alias, $field, $valueParameter))->setParameter($valueParameter, $value);
break;
case self::PARAMETER_LESS_THAN:
if (!is_numeric($value)) {
$this->logger->notice('Invalid filter ignored', ['exception' => new InvalidArgumentException(sprintf('Invalid value for "[%s]", expected number', $operator))]);
return;
}
$queryBuilder->andWhere(sprintf('%s.%s < :%s', $alias, $field, $valueParameter))->setParameter($valueParameter, $value);
break;
case self::PARAMETER_LESS_THAN_OR_EQUAL:
if (!is_numeric($value)) {
$this->logger->notice('Invalid filter ignored', ['exception' => new InvalidArgumentException(sprintf('Invalid value for "[%s]", expected number', $operator))]);
return;
}
$queryBuilder->andWhere(sprintf('%s.%s <= :%s', $alias, $field, $valueParameter))->setParameter($valueParameter, $value);
break;
}
}