addSelect("to_char(cal.startDate, 'MM-YYYY') AS month_year_aggregator"); // $qb->addSelect("extract(month from age(cal.startDate, cal.endDate)) AS month_aggregator"); $groupBy = $qb->getDQLPart('groupBy'); if (!empty($groupBy)) { $qb->addGroupBy('month_year_aggregator'); } else { $qb->groupBy('month_year_aggregator'); } } public function applyOn(): string { return Declarations::CALENDAR_TYPE; } public function buildForm(FormBuilderInterface $builder) { // No form needed } public function getLabels($key, array $values, $data): Closure { return static function ($value): string { if ('_header' === $value) { return 'by month and year'; } $month = substr($value, 0, 2); $year = substr($value, 3, 4); return strftime('%B %G', mktime(0, 0, 0, $month, '1', $year)); }; } public function getQueryKeys($data): array { return ['month_year_aggregator']; } public function getTitle(): string { return 'Group by month and year'; } }