/** * Modifies and returns a Query object according to the (optional) result modifier. * * @param QueryBuilder $queryBuilder * @param ModifierInterface|null $modifier * * @return Query */ private function modifyQuery(QueryBuilder $queryBuilder, ModifierInterface $modifier = null) { $query = $queryBuilder->getQuery(); if ($modifier) { $modifier->modify($query); } return $query; }
/** * Get the query after matching with given specification. * * @param SpecificationInterface $specification * @param ModifierInterface $resultModifier * * @throws LogicException * * @return Query */ public function match(SpecificationInterface $specification, ModifierInterface $resultModifier = null) { if (!$specification->isSatisfiedBy($this->getEntityName())) { throw new LogicException(sprintf('Specification "%s" not supported by this repository!', get_class($specification))); } $dqlAlias = $this->dqlAlias; $queryBuilder = $this->createQueryBuilder($dqlAlias); $condition = $specification->modify($queryBuilder, $dqlAlias); if (!empty($condition)) { $queryBuilder->where($condition); } $query = $queryBuilder->getQuery(); if ($resultModifier) { $resultModifier->modify($query); } return $query; }