Obtener registros aleatorios de la base de datos en Laravel

Si quieres obtener registros aleatorios en Laravel, tenemos una función llamada orderByRaw la cual puedes adjuntar a la consulta que ester armando:

$posts = Post::orderByRaw("RAND()")->limit(5)
       ->pluck("title"); //get();
   
dd($posts);

Unos ejemplos:

Illuminate\Support\Collection {#1433 ?
 #items: array:5 [?
   0 => "Los Arrays en Programación - 18"
   1 => "Dismissible Widget en Flutter"
   2 => "Conectar una app en Flutter a la base de datos Cloud Firestore en Firebase"
   3 => "Ejecutar script automáticamente con Cron en Linux"
   4 => "Escalado y recortando imágenes con Canvas"
 ]
}
Illuminate\Support\Collection {#1433 ?
 #items: array:5 [?
   0 => "El elemento symbol para los SVG en HTML"
   1 => "Desarrollando aplicaciones de Realidad aumentada con Wikitude (parte 1)"
   2 => "Las propiedades flex-grow, flex-shrink y flex-basis"
   3 => "¿Qué es Blender 3D? y primeros pasos (tutoriales)"
   4 => "Problemas con Android Studio y sus proyectos"
 ]
}

Recuerda que el where que está dentro del whereHas nos permite agregar validaciones POR DEFECTO en la relación, es decir, la categoría, de tal manera que en este caso aunque tanto post como category tienen una columna llamada id, por defecto va a buscar el campo (id en este caso) en la tabla de categoría (la relación) si existe, emplea la de la relación, y si n o existe, emplearía la de post.
orderByRaw con relaciones

Lo más interesante es que puedes adjuntarla con whereHas para poder filtrar por alguna relación; por ejemplo, un post tiene una categoría asignada, así que:

$posts = Post::whereHas('category', function ($query) {
           $query->where('id', '<', '10');
       })->orderByRaw("RAND()")->limit(5)
       ->pluck("title"); //get();
   
dd($posts);

Unos ejemplos:

Illuminate\Support\Collection {#1432 ?
 #items: array:5 [?
   0 => "Creando un fondo vivo con CSS"
   1 => "4+1 selectores CSS esenciales al momento de programar"
   2 => "Creando un carrusel animado con CSS"
   3 => "Selectores en JavaScript"
   4 => "Múltiples capas: Efecto de apertura de una puerta con CSS"
 ]
}
Illuminate\Support\Collection {#1432 ?
 #items: array:5 [?
   0 => "Múltiples bordes en un contenedor con CSS"
   1 => "¿Cómo hacer un sistema de grid (rejillas) responsivo casero en CSS?"
   2 => "Plugin para las Cookies en JavaScript"
   3 => "¿Cómo obtener la resolución de pantalla con JavaScript/jQuery?"
   4 => "Formas geométricas con CSS (parte 2)"
 ]

Por supuesto, con limit() puedes limitar o indicar cuantos registros quieres obtener como máximo; esto por darle algunas ideas, pero puedes adaptarle otras funciones.

Por lo demás, puedes aplicar cualquier cantidad de condiciones adicionales antes de usar el método orderByRaw.

Si quieres obtener más información de Laravel, recueda que cuentas con el curso de Laravel desde cero.

- Andrés Cruz

In english
Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.