/** * Add name first letter where condition to query builder * * @param Doctrine\ORM\QueryBuilder $qb * @param array $letters * @return void */ private function addNameRangeWhere($qb, array $letters) { $orx = $qb->expr()->orx(); foreach ($letters as $letter) { $orx->add($qb->expr()->like('u.username', $qb->expr()->literal(substr($letter, 0, 1) . '%'))); } $qb->andWhere($orx); }
/** * Creates query for given filters in stored in session * * @param array $sessionData Filters * @param Doctrine\ORM\Query\Expr $query Query operator * @param Doctrine\ORM\QueryBuilder $queryBuilder Query builder * * @return Doctrine\ORM\Query\Expr */ private function buildSessionFilters($sessionData, $query, $queryBuilder) { foreach ($sessionData as $key => $value) { if ($key) { if ($key == 'filterApproved') { $query->add($queryBuilder->expr()->eq('c.status', 0)); } else { $query->add($queryBuilder->expr()->eq('c.status', $value)); } } } return $query; }
/** * @param $field * @param $operation * @param null $value * @param string $alias */ protected function makeExpression($field, $operation, $value = null, $alias = self::DEFAULT_TABLE_ALIAS) { if (!is_array($value)) { $value = $this->queryBuilder->expr()->literal($value); } if ($field) { $field = $this->getFullFieldName($field, $alias); } $expression = null; switch (strtolower($operation)) { case '>': $expression = $this->queryBuilder->expr()->gt($field, $value); break; case '=': $expression = $this->queryBuilder->expr()->eq($field, $value); break; case '<': $expression = $this->queryBuilder->expr()->lt($field, $value); break; case '>=': $expression = $this->queryBuilder->expr()->gte($field, $value); break; case '<=': $expression = $this->queryBuilder->expr()->lte($field, $value); break; case '<>': $expression = $this->queryBuilder->expr()->neq($field, $value); break; case 'isnull': $expression = $this->queryBuilder->expr()->isNull($field); break; case 'isnotnull': $expression = $this->queryBuilder->expr()->isNotNull($field); break; case 'in': $expression = $this->queryBuilder->expr()->in($field, $value); break; case 'orx': $expression = $this->queryBuilder->expr()->orX()->addMultiple($this->makeExpressions($value, $alias)); break; case 'andx': $expression = $this->queryBuilder->expr()->andX()->addMultiple($this->makeExpressions($value, $alias)); break; case 'notin': $expression = $this->queryBuilder->expr()->notIn($field, $value); break; case 'contains': /* * @todo implementar o metodo contains */ // $expression = $this->queryBuilder->expr()->contains($field, $value); break; case 'like': $expression = $this->queryBuilder->expr()->like('LOWER(' . $field . ')', strtolower($value)); break; case 'notlike': $expression = $this->queryBuilder->expr()->notLike($field, $value); break; case 'isinstanceof': $expression = $alias . ' INSTANCE OF ' . $value; break; case 'between': $expression = $this->queryBuilder->expr()->between($field, $this->queryBuilder->expr()->literal($value[0]), $this->queryBuilder->expr()->literal($value[1])); break; case 'dateparteq': $expression = $this->queryBuilder->expr()->eq("DATEPART('" . $value['format'] . "', " . $field . ')', $value['value']); } return $expression; }