/**
  * 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;
 }