示例#1
0
 /**
  * @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;
 }