/** * @param \Leapt\AdminBundle\Datalist\Filter\Expression\ComparisonExpression $expression * @return callable * @throws \UnexpectedValueException */ private function buildComparisonExpressionCallback(ComparisonExpression $expression) { $function = function ($item) use($expression) { $accessor = PropertyAccess::createPropertyAccessor(); $value = $accessor->getValue($item, $expression->getPropertyPath()); $comparisonValue = $expression->getValue(); $operator = $expression->getOperator(); switch ($operator) { case ComparisonExpression::OPERATOR_EQ: $result = $value === $comparisonValue; break; case ComparisonExpression::OPERATOR_NEQ: $result = $value !== $comparisonValue; break; case ComparisonExpression::OPERATOR_GT: $result = $value > $comparisonValue; break; case ComparisonExpression::OPERATOR_GTE: $result = $value >= $comparisonValue; break; case ComparisonExpression::OPERATOR_LT: $result = $value < $comparisonValue; break; case ComparisonExpression::OPERATOR_LTE: $result = $value <= $comparisonValue; break; case ComparisonExpression::OPERATOR_LIKE: $result = false !== strpos($value, $comparisonValue); break; case ComparisonExpression::OPERATOR_IN: $result = in_array($value, $comparisonValue); break; case ComparisonExpression::OPERATOR_NIN: $result = !in_array($value, $comparisonValue); break; case ComparisonExpression::OPERATOR_IS_NULL: $result = null === $value; break; case ComparisonExpression::OPERATOR_IS_NOT_NULL: $result = null !== $value; break; default: throw new \UnexpectedValueException(sprintf('Unknown operator "%s"', $operator)); break; } return $result; }; return $function; }
/** * @param \Leapt\AdminBundle\Datalist\Filter\Expression\ComparisonExpression $expression * @return \Doctrine\ORM\Query\Expr\Comparison * @throws \UnexpectedValueException */ private function buildQueryBuilderComparisonExpression(ComparisonExpression $expression) { $propertyPath = $expression->getPropertyPath(); $placeholder = ':' . uniqid('p'); $comparisonValue = $expression->getValue(); $operator = $expression->getOperator(); switch ($operator) { case ComparisonExpression::OPERATOR_EQ: $expr = $this->queryBuilder->expr()->eq($propertyPath, $placeholder); break; case ComparisonExpression::OPERATOR_NEQ: $expr = $this->queryBuilder->expr()->neq($propertyPath, $placeholder); break; case ComparisonExpression::OPERATOR_GT: $expr = $this->queryBuilder->expr()->gt($propertyPath, $placeholder); break; case ComparisonExpression::OPERATOR_GTE: $expr = $this->queryBuilder->expr()->gte($propertyPath, $placeholder); break; case ComparisonExpression::OPERATOR_LT: $expr = $this->queryBuilder->expr()->lt($propertyPath, $placeholder); break; case ComparisonExpression::OPERATOR_LTE: $expr = $this->queryBuilder->expr()->lte($propertyPath, $placeholder); break; case ComparisonExpression::OPERATOR_LIKE: $expr = $this->queryBuilder->expr()->like($propertyPath, $placeholder); $comparisonValue = '%' . $comparisonValue . '%'; break; case ComparisonExpression::OPERATOR_IN: $expr = $this->queryBuilder->expr()->in($propertyPath, $placeholder); break; case ComparisonExpression::OPERATOR_NIN: $expr = $this->queryBuilder->expr()->notIn($propertyPath, $placeholder); break; case ComparisonExpression::OPERATOR_IS_NULL: $expr = $this->queryBuilder->expr()->isNull($propertyPath); break; case ComparisonExpression::OPERATOR_IS_NOT_NULL: $expr = $this->queryBuilder->expr()->isNotNull($propertyPath); break; default: throw new \UnexpectedValueException(sprintf('Unknown operator "%s"', $operator)); break; } if (!in_array($operator, array(ComparisonExpression::OPERATOR_IS_NULL, ComparisonExpression::OPERATOR_IS_NOT_NULL))) { $this->queryBuilder->setParameter($placeholder, $comparisonValue); } return $expr; }