PartKeepr\DoctrineReflectionBundle\Filter\AdvancedSearchFilter::getFilterExpression PHP Method

getFilterExpression() private method

Returns the expression for a specific filter.
private getFilterExpression ( Doctrine\ORM\QueryBuilder $queryBuilder, Filter $filter ) : Doctrine\ORM\Query\Expr\Comparison | Doctrine\ORM\Query\Expr\Func
$queryBuilder Doctrine\ORM\QueryBuilder
$filter Filter
return Doctrine\ORM\Query\Expr\Comparison | Doctrine\ORM\Query\Expr\Func
    private function getFilterExpression(QueryBuilder $queryBuilder, Filter $filter)
    {
        if ($filter->hasSubFilters()) {
            $subFilterExpressions = [];
            foreach ($filter->getSubFilters() as $subFilter) {
                /**
                 * @var $subFilter Filter
                 */
                if ($subFilter->getAssociation() !== null) {
                    $this->addJoins($queryBuilder, $subFilter);
                }
                $subFilterExpressions[] = $this->getFilterExpression($queryBuilder, $subFilter);
            }
            if ($filter->getType() == Filter::TYPE_AND) {
                return call_user_func_array([$queryBuilder->expr(), "andX"], $subFilterExpressions);
            } else {
                return call_user_func_array([$queryBuilder->expr(), "orX"], $subFilterExpressions);
            }
        }
        if ($filter->getAssociation() !== null) {
            $this->addJoins($queryBuilder, $filter);
            $alias = $this->getAlias('o.' . $filter->getAssociation()) . '.' . $filter->getProperty();
        } else {
            $alias = 'o.' . $filter->getProperty();
        }
        if (strtolower($filter->getOperator()) == Filter::OPERATOR_IN) {
            if (!is_array($filter->getValue())) {
                throw new \Exception('Value needs to be an array for the IN operator');
            }
            return $queryBuilder->expr()->in($alias, $filter->getValue());
        } else {
            $paramName = ':param' . $this->parameterCount;
            $this->parameterCount++;
            $queryBuilder->setParameter($paramName, $filter->getValue());
            switch (strtolower($filter->getOperator())) {
                case Filter::OPERATOR_EQUALS:
                    return $queryBuilder->expr()->eq($alias, $paramName);
                    break;
                case Filter::OPERATOR_GREATER_THAN:
                    return $queryBuilder->expr()->gt($alias, $paramName);
                    break;
                case Filter::OPERATOR_GREATER_THAN_EQUALS:
                    return $queryBuilder->expr()->gte($alias, $paramName);
                    break;
                case Filter::OPERATOR_LESS_THAN:
                    return $queryBuilder->expr()->lt($alias, $paramName);
                    break;
                case Filter::OPERATOR_LESS_THAN_EQUALS:
                    return $queryBuilder->expr()->lte($alias, $paramName);
                    break;
                case Filter::OPERATOR_NOT_EQUALS:
                    return $queryBuilder->expr()->neq($alias, $paramName);
                    break;
                case Filter::OPERATOR_LIKE:
                    return $queryBuilder->expr()->like($alias, $paramName);
                    break;
                default:
                    throw new \Exception('Unknown operator ' . $filter->getOperator());
            }
        }
    }