/**
  * Adds where clause according to the strategy.
  *
  * @param string       $strategy
  * @param QueryBuilder $queryBuilder
  * @param string       $alias
  * @param string       $field
  * @param string       $value
  *
  * @return string
  *
  * @throws InvalidArgumentException If strategy does not exist
  */
 private function addWhereByStrategy($strategy, QueryBuilder $queryBuilder, $alias, $field, $value)
 {
     $valueParameter = QueryNameGenerator::generateParameterName($field);
     switch ($strategy) {
         case null:
         case self::STRATEGY_EXACT:
             return $queryBuilder->andWhere(sprintf('%s.%s = :%s', $alias, $field, $valueParameter))->setParameter($valueParameter, $value);
         case self::STRATEGY_PARTIAL:
             return $queryBuilder->andWhere(sprintf('%s.%s LIKE :%s', $alias, $field, $valueParameter))->setParameter($valueParameter, sprintf('%%%s%%', $value));
         case self::STRATEGY_START:
             return $queryBuilder->andWhere(sprintf('%s.%s LIKE :%s', $alias, $field, $valueParameter))->setParameter($valueParameter, sprintf('%s%%', $value));
         case self::STRATEGY_END:
             return $queryBuilder->andWhere(sprintf('%s.%s LIKE :%s', $alias, $field, $valueParameter))->setParameter($valueParameter, sprintf('%%%s', $value));
         case self::STRATEGY_WORD_START:
             return $queryBuilder->andWhere(sprintf('%1$s.%2$s LIKE :%3$s_1 OR %1$s.%2$s LIKE :%3$s_2', $alias, $field, $valueParameter))->setParameter(sprintf('%s_1', $valueParameter), sprintf('%s%%', $value))->setParameter(sprintf('%s_2', $valueParameter), sprintf('%% %s%%', $value));
     }
     throw new InvalidArgumentException(sprintf('strategy %s does not exist.', $strategy));
 }
Beispiel #2
0
 /**
  * Adds the where clause according to the chosen null management.
  *
  * @param QueryBuilder $queryBuilder
  * @param string       $alias
  * @param string       $field
  * @param string       $operator
  * @param string       $value
  * @param int|null     $nullManagement
  */
 private function addWhere(QueryBuilder $queryBuilder, $alias, $field, $operator, $value, $nullManagement)
 {
     $valueParameter = QueryNameGenerator::generateParameterName(sprintf('%s_%s', $field, $operator));
     $baseWhere = sprintf('%s.%s %s :%s', $alias, $field, self::PARAMETER_BEFORE === $operator ? '<=' : '>=', $valueParameter);
     if (null === $nullManagement || self::EXCLUDE_NULL === $nullManagement) {
         $queryBuilder->andWhere($baseWhere);
     } elseif (self::PARAMETER_BEFORE === $operator && self::INCLUDE_NULL_BEFORE === $nullManagement || self::PARAMETER_AFTER === $operator && self::INCLUDE_NULL_AFTER === $nullManagement) {
         $queryBuilder->andWhere($queryBuilder->expr()->orX($baseWhere, $queryBuilder->expr()->isNull(sprintf('%s.%s', $alias, $field))));
     } else {
         $queryBuilder->andWhere($queryBuilder->expr()->andX($baseWhere, $queryBuilder->expr()->isNotNull(sprintf('%s.%s', $alias, $field))));
     }
     $queryBuilder->setParameter($valueParameter, new \DateTime($value));
 }