public function testCreateDataSet_sort() { $request = $this->getBaseRequest(); $request->columnSorts = [0 => 'desc', 1 => 'asc']; $dataSet = $this->dataSource->createDataSet($request); $orderBy = $this->qb->getDqlPart('orderBy'); $this->assertEquals('p.name desc', $orderBy[0]->__toString()); $this->assertEquals('p.price asc', $orderBy[1]->__toString()); }
private function aliasExists($alias, QueryBuilder $qb) { $aliases = []; foreach ($qb->getDqlPart('join') as $joins) { foreach ($joins as $join) { $aliases[] = $join->getAlias(); } } $aliases[] = $qb->getRootAlias(); return in_array($alias, $aliases); }
private function retrieveExpressionByFieldName($fieldName) { /** @var $selectPart \Doctrine\ORM\Query\Expr\Select */ foreach ($this->qb->getDqlPart('select') as $selectPart) { foreach ($selectPart->getParts() as $part) { $pattern = "/^(.+) AS (?:|HIDDEN ){$fieldName}\$/i"; if (preg_match($pattern, $part, $matches)) { return $matches[1]; } } } throw new \InvalidArgumentException("Expression for field '{$fieldName}' could not be determined."); }
/** * {@inherit} */ public function getItemsCountInCategory(CategoryInterface $category, QueryBuilder $categoryQb = null) { $qb = $this->em->createQueryBuilder(); $qb->select($qb->expr()->count('distinct i')); $qb->from($this->entityName, 'i'); $qb->join('i.categories', 'node'); if (null === $categoryQb) { $qb->where('node.id = :nodeId'); $qb->setParameter('nodeId', $category->getId()); } else { $qb->where($categoryQb->getDqlPart('where')); $qb->setParameters($categoryQb->getParameters()); } return $qb->getQuery()->getSingleScalarResult(); }
/** * @param QueryBuilder $qb * @return boolean */ protected function checkIfQueryHasFetchJoin(QueryBuilder $qb) { $join = $qb->getDqlPart('join'); if (empty($join)) { return false; } foreach ($join[$this->getTableAlias()] as $join) { if ($join->getJoinType() === Join::INNER_JOIN || $join->getJoinType() === Join::LEFT_JOIN) { return true; } } return false; }
/** * {@inheritdoc} */ public function getProductIdsInCategory(CategoryInterface $category, QueryBuilder $categoryQb = null) { $qb = $this->em->createQueryBuilder(); $qb->select('p.id'); $qb->from($this->entityName, 'p'); $qb->join('p.categories', 'node'); if (null === $categoryQb) { $qb->where('node.id = :nodeId'); $qb->setParameter('nodeId', $category->getId()); } else { $qb->where($categoryQb->getDqlPart('where')); $qb->setParameters($categoryQb->getParameters()); } $products = $qb->getQuery()->execute(array(), AbstractQuery::HYDRATE_ARRAY); $productIds = array(); foreach ($products as $product) { $productIds[] = $product['id']; } $productIds = array_unique($productIds); return $productIds; }