'user', IShare::TYPE_GROUP => 'group', IShare::TYPE_LINK => 'link', IShare::TYPE_EMAIL => 'email', ]; $qb = $this->connection->getQueryBuilder(); $result = $qb->select($qb->func()->count('*', 'count'), 'share_type') ->from('share') ->where($qb->expr()->in('share_type', $qb->createNamedParameter(array_keys($types), IQueryBuilder::PARAM_INT_ARRAY))) ->groupBy('share_type') ->executeQuery(); if ($result->rowCount() === 0) { yield new Metric(0); return; } foreach ($result->iterateAssociative() as $row) { yield new Metric($row['count'], ['type' => $types[$row['share_type']]]); } } }