Puede usar la consulta que encontró para recuperar eficientemente los identificadores de N registros aleatorios a través de una consulta SQL nativa, luego hacer una consulta de doctrina para buscar los objetos a través de un WHERE IN(...)
usando dql.
Ejemplo:
// fetch $randomIds via native sql query using $em->getConnection()->... methods
// or from a memory based cache
$qb = $em->createQueryBuilder('u');
$em->createQuery('
SELECT u
FROM Entity\User
WHERE ' . $qb->expr()->in('u.id', $randomIds) . '
');
La misma estrategia se aplica si usted lo trae las identificaciones aleatorias de una memoria caché (como redis, tal vez usando SRANDMEMBER
) - en primer lugar buscar los identificadores de, a continuación, ir a buscar las entidades a través de un WHERE IN
.
Sólo hay que asegurarse de que sus identificadores de caché están en sincronía con la base de datos (IDS eliminados se quitan de la base de datos y de la memoria caché, etc.)
Posible duplicado de [Cómo seleccionar al azar con la doctrina] (http://stackoverflow.com/questions/10762538/how-to-select-randomly-with-doctrine) –