setFirstResult()
основано на 0.
Следуя вашему подходу, вы должны использовать:
->setFirstResult(rand(0, $count - 1))->setMaxResults(1)->getSingleResult();
Источник:
Я согласен, что документация по этому вопросу неясна. Однако мы можем видеть, что Doctrine \ DBAL \ Query \ QueryBuilder использует его следующим образом:
->modifyLimitQuery($query, $this->maxResults, $this->firstResult);
Который затем переводится в SQL в Doctrine \ DBAL \ Platforms \ AbstractPlatform:
final public function modifyLimitQuery($query, $limit, $offset = null)
{
...
$query .= ' OFFSET ' . $offset;
OFFSET
Будучи основанным на 0 в SQL, мы можем вывести, что setFirstResult () также основан на 0.