ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\RangeFilter::addWhere PHP Method

addWhere() protected method

Adds the where clause according to the operator.
protected addWhere ( Doctrine\ORM\QueryBuilder $queryBuilder, ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface $queryNameGenerator, string $alias, string $field, string $operator, string $value )
$queryBuilder Doctrine\ORM\QueryBuilder
$queryNameGenerator ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface
$alias string
$field string
$operator string
$value string
    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;
        }
    }