*/ class InvoiceTemplateRepository extends EntityRepository { public function hasTemplate(): bool { return $this->count([]) > 0; } public function getQueryBuilderForFormType(): QueryBuilder { $qb = $this->getEntityManager()->createQueryBuilder(); $qb->select('t') ->from(InvoiceTemplate::class, 't') ->orderBy('t.name'); return $qb; } private function getQueryBuilderForQuery(BaseQuery $query): QueryBuilder { $qb = $this->getEntityManager()->createQueryBuilder(); $qb->select('t') ->from(InvoiceTemplate::class, 't') ->orderBy('t.name'); return $qb; } /** * @return PaginatorInterface */ private function getPaginatorForQuery(BaseQuery $baseQuery): PaginatorInterface { $counter = $this->countTemplatesForQuery($baseQuery); /** @var Query $query */ $query = $this->getQueryBuilderForQuery($baseQuery)->getQuery(); return new QueryPaginator($query, $counter); } public function getPagerfantaForQuery(BaseQuery $query): Pagination { return new Pagination($this->getPaginatorForQuery($query), $query); } /** * @return int<0, max> */ public function countTemplatesForQuery(BaseQuery $query): int { $qb = $this->getQueryBuilderForQuery($query); $qb ->resetDQLPart('select') ->resetDQLPart('orderBy') ->select($qb->expr()->countDistinct('t.id')) ; return (int) $qb->getQuery()->getSingleScalarResult(); // @phpstan-ignore-line } public function saveTemplate(InvoiceTemplate $template): void { $this->getEntityManager()->persist($template); $this->getEntityManager()->flush(); } public function removeTemplate(InvoiceTemplate $template): void { $this->getEntityManager()->remove($template); $this->getEntityManager()->flush(); } }