/** * Transforms a Specification into a Query * * @param Specification $specification * @return \Doctrine\ORM\Query * @throws \InvalidArgumentException */ private function getQuery(Specification $specification) { if (!$specification->supports($this->getEntityName())) { throw new \InvalidArgumentException("Specification does not support this repository"); } $qb = $this->createQueryBuilder('e'); if ($expr = $specification->match($qb, 'e')) { $qb->where($expr); } $query = $qb->getQuery(); $specification->modifyQuery($query); return $query; }
/** * Modifies the query once it has been generated. * * @param \Doctrine\ORM\Query $query */ public function modifyQuery(Query $query) { if ($this->specification) { $this->specification->modifyQuery($query); } }