Привет, я сделал простой запрос для механизма ранжирования с помощью построителя запросов.
$result = $qb
->select('u')
->where('u.status = 1')
->from('PGMainBundle:User', 'u')
->groupBy('u.id')
->addSelect('COUNT(c.id) as HIDDEN nChallenges')
->leftJoin('u.challenges', 'c', 'WITH', 'c.closed = 1' )
->add('orderBy','u.points DESC, nChallenges DESC')
->orderBy('u.points', 'DESC')
->addOrderBy('nChallenges', 'DESC')
->setFirstResult($offset*50)
->setMaxResults(50)
->getQuery()
->getResult();
Теперь, когда мой механизм ранжирования работает нормально, я хотел бы проверить, что есть у loop.index у пользователя с $ id.
Сказал это, я не хочу использовать цикл foreach для результата, чтобы сделать это.
Есть ли более оптимальный способ просто вернуть «позицию» в рейтинге?
Возможно, с помощью построителя запросов?
Результат должен быть коллекция массивов таким образом, вы можете получить индекс данного элемента следующим образом:
$result->indexOf($yourelement)
Иначе, если ключи не в порядке, но являются идентификаторами сущностей:
$keys = $result->getKeys();
$id = $yourElement->getId();
$position = array_search($id, $keys);
Других решений пока нет …