Метод orderBy должен принимать поле Song для сортировки (например, s.author или s.title), а не случайное значение.Даже если вы выбрали случайное поле для упорядочения, например, выбрав случайное поле в php, это не будет совсем случайным, потому что вы всегда получите первый результат для текущих критериев сортировки.Если в ваших песнях есть 8 полей, вы получите только 8 разных песен в результатах поиска, даже если у вас сохранены тысячи.
Вот предложение:
$qb1->select('s')
->from('\My\Entity\Song', 's')
->where('s.id <> ?1')
->setMaxResults(1)
->setParameters(array(1=>$current->id))
->setFirstResult($offset);
Здесь, $Смещение может быть случайным значением, которое вы получаете в php через функции rand () или mt_rand ().Конечно, $ offset должен быть меньше, чем общее количество песен.Это всего лишь предположение, есть много способов сделать это.
ИМХО Я думаю, что Doctrine2 - это экстраординарный ORM, и нет ничего более продвинутого, чем это.Я предполагаю, что вы прочитали раздел Query Builder справочного руководства, но я также предлагаю вам прочитать раздел DQL , который объясняет, какие функции доступны в системе запросов Doctrine, и как выможно сделать самостоятельно (!).