Sobre las colecciones sí que existe un método random()
que te devuelve un elemento aleatoriamente. Pero no es recomendable usarlo para tu objetivo, porque necesitarías tener en memoria todos los registros almacenados en la tabla.
En lugar de ello lo que se hace es lo siguiente:
- Hacer una consulta sobre el modelo que necesites, aplicando orden aleatorio. Esto lo haces con
inRandomOrder()
del query builder. - Limitar la consulta a un registro
- Tomar el primer registro que te devuelve la consulta
Imagina que quieres sacar un usuario aleatorio de tu base de datos, con el modelo User. Esto se resume en este código.
User::inRandomOrder()->limit(1)->first();
Creo que no necesitas hacer el limit(1), solo lo he puesto por precaución. En realidad cuando lanzas el método first() con una consulta en Laravel Eloquent ya estás limitando la consulta a un registro de manera implícita. En otras palabras, este código sería equivalente en el fondo:
User::inRandomOrder()->first();
Espero que te sirva!