userRepository = $userRepository; $this->userRender = $userRender; } public function addRole(): ?string { return null; } public function alterQuery(QueryBuilder $qb, $data) { // add select element $qb->addSelect(sprintf('IDENTITY(activity.user) AS %s', self::KEY)); // add the "group by" part $qb->addGroupBy(self::KEY); } public function applyOn(): string { return Declarations::ACTIVITY; } public function buildForm(FormBuilderInterface $builder) { // nothing to add } public function getLabels($key, $values, $data): Closure { // preload users at once $this->userRepository->findBy(['id' => $values]); return function ($value) { if ('_header' === $value) { return 'Activity user'; } $u = $this->userRepository->find($value); return $this->userRender->renderString($u, []); }; } public function getQueryKeys($data) { return [self::KEY]; } public function getTitle(): string { return 'Aggregate by activity user'; } }