/** * Supports a given class name. * * @param string $className * @return bool */ public function supports($className) { if ($this->specification) { return $this->specification->supports($className); } return true; }
/** * 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; }