Привет, я сделал простой запрос для механизма ранжирования с построителем запросов.
$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);