getAllAliases(), true)) { $qb->leftJoin('event_part.role', 'role'); } $qb->addSelect(sprintf('IDENTITY(event_part.role) AS %s', self::KEY)); $qb->addGroupBy(self::KEY); } public function applyOn(): string { return Declarations::EVENT_PARTICIPANTS; } public function buildForm(FormBuilderInterface $builder) { // no form required for this aggregator } public function getFormDefaultData(): array { return []; } public function getLabels($key, array $values, $data): \Closure { return function (int|string|null $value): string { if ('_header' === $value) { return 'Participant role'; } if (null === $value || '' === $value || null === $r = $this->roleRepository->find($value)) { return ''; } return $this->translatableStringHelper->localize($r->getName()); }; } public function getQueryKeys($data): array { return [self::KEY]; } public function getTitle() { return 'Group by participant role'; } }