El método orderBy debe aceptar un campo de Song para fines de clasificación (como 's.author' o 's.title'), y no un valor aleatorio. Incluso si elige un campo aleatorio para ordenar, como seleccionar uno aleatoriamente en php, esto no será muy aleatorio, porque siempre obtendrá el primer resultado para los criterios de clasificación actuales. Si sus canciones tienen 8 campos, solo obtendrá 8 canciones diferentes en los resultados de búsqueda, incluso si tiene miles almacenados.
Aquí es una sugerencia:
$qb1->select('s')
->from('\My\Entity\Song', 's')
->where('s.id <> ?1')
->setMaxResults(1)
->setParameters(array(1=>$current->id))
->setFirstResult($offset);
Aquí, $ desplazamiento puede ser un valor aleatorio que obtenga en php a través de rand() o() mt_rand funciones. Por supuesto, $ offset debe ser menor que el número total de canciones. Esta es solo una sugerencia, hay muchas maneras en que puede lograr esto.
EN MI OPINIÓN Creo que Doctrine2 es un ORM extraordinario, y no hay nada tan avanzado como él. Supongo que leyó la sección Query Builder de la guía de referencia, pero también sugiero que lea la sección DQL, que explica cuáles son las funciones disponibles en el sistema de consulta de Doctrine y cómo puede crear la suya (!).
[Aquí] (http://www.doctrine-project.org/documentation/manual/1_2/hu/dql-doctrine-query-language:order-by-clause:using-random-order) y [aquí] (http://www.onepie.org/2009/12/21/fetch-a-random-record-with-doctrine/) son dos ejemplos en Doctrine 1.2. Supongo que algo similar funcionaría para Doctrine 2. –