entityManager = $entityManager; } public function getBarChartData(BarChartInput $input): array { $startDate = new \DateTimeImmutable($input->start); $endDate = new \DateTimeImmutable($input->end); echo "================================================================="; $queryBuilder = $this->entityManager->createQueryBuilder(); // Sélectionnez la date avec le format approprié en fonction de la granularité switch ($input->granularity) { case 'day': $selectExpression = 'DATE_FORMAT(s.date, \'%Y-%m-%d\')'; $groupByExpression = 's.date'; break; case 'month': $selectExpression = 'DATE_FORMAT(s.date, \'%Y-%m\')'; $groupByExpression = 'DATE_FORMAT(s.date, \'%Y-%m\')'; break; case 'year': $selectExpression = 'DATE_FORMAT(s.date, \'%Y\')'; $groupByExpression = 'DATE_FORMAT(s.date, \'%Y\')'; break; default: throw new \InvalidArgumentException('Invalid granularity'); } $result = $queryBuilder ->select($selectExpression . ' as date', 'COUNT(s.id) as occurrences') ->from(Sale::class, 's') ->where('s.date BETWEEN :start AND :end') ->setParameter('start', $startDate) ->setParameter('end', $endDate) ->groupBy($groupByExpression) ->orderBy('date') ->getQuery() ->getResult(); $output = []; foreach ($result as $row) { $output[] = new BarChartOutput($row['date'], (int)$row['occurrences']); } return $output; } }