Muy buenas, me surge una duda, tengo que recoger una serie de registros de la base de datos que tengo en Mysql. La sentencia en SQL sin problemas, lo que me ocurre ahora es que Doctrine no reconoce la función rand()
y no me proporcionan ninguna alternativa ¿le ha ocurrido esto a alguien? y ¿qué decisión ha tomado? gracias :)
Respuestas
Me temo que la respuesta te va a decepcionar un poco: Doctrine2 no soporta rand()
y nunca lo hará. Hace tiempo que los usuarios pidieron esta funcionalidad en el issue tracker de Doctrine y la respuesta fue contundente: "Won't fix".
La solución más sencilla, pero a la vez la más difícil de mantener, sería ejecutar una consulta SQL nativa mediante Doctrine, tal y como se explica en el manual de Doctrine.
En mi caso, cuando necesité seleccionar varios registros aleatorios lo hice de la otra forma que recomienda la comunidad. En la portada de la sección de bundles de symfony.es muestro un listado aleatorio de bundles destacados. Lo que hago es primero seleccionar todos los id
de los bundles destacados:
$destacados = $this->getEntityManager()->createQuery( 'SELECT id FROM ...:Bundle WHERE ... AND is_highlighted = true' )->getArrayResult();
Después, selecciono aleatoriamente varios id
y los almaceno en una variable llamada $ids
. Por último, hago una consulta de tipo WHERE ... IN
y le paso los id
seleccionados anteriormente:
$query = $this->getEntityManager()->createQuery( 'SELECT * FROM ...:Bundle WHERE id IN (:ids) ORDER BY score DESC' )->setParameter('ids', $ids);
@javiereguiluz