*/ class VisitRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Visit::class); } public function save(Visit $visit, bool $flush = true): void { $this->getEntityManager()->persist($visit); if ($flush) { $this->getEntityManager()->flush(); } } public function getVisitCountByRoute(): array { return $this->createQueryBuilder('v') ->select('v.route, COUNT(v.id) as count') ->groupBy('v.route') ->orderBy('count', 'DESC') ->getQuery() ->getResult(); } /** * Returns total number of visits since the given datetime (inclusive). */ public function countVisitsSince(\DateTimeImmutable $since): int { $qb = $this->createQueryBuilder('v') ->select('COUNT(v.id)') ->where('v.visitedAt >= :since') ->setParameter('since', $since, Types::DATETIME_IMMUTABLE); return (int) $qb->getQuery()->getSingleScalarResult(); } }