> Faqs > Cómo obtener una fila aleatoria en una consulta con Laravel Eloquent

Cómo obtener una fila aleatoria en una consulta con Laravel Eloquent

Tengo una pregunta para vosotros.

En una consulta sobre un modelo con Laravel Eloquent quiero recibir una fila aleatoria, es decir, uno de los registros de manera random. ¿Cómo lo puedo hacer?

Respuestas

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!

Julian
1147 49 87 46
Me ha servido, tal cual. Muchas gracias!!