En cada nueva versión, Laravel continúa sorprendiendo con utilidades que combinan elegancia y practicidad. Una de las más interesantes es la clase
Lottery, introducida recientemente en el framework, que permite ejecutar bloques de código en función de una probabilidad definida.Esta característica resulta útil para acciones ocasionales, como registrar logs, enviar reportes de diagnóstico o ejecutar pruebas A/B, sin necesidad de manejar manualmente generadores aleatorios.
¿Qué es Laravel Lottery?
Lottery es una nueva API de Laravel diseñada para ejecutar código con base en odds (probabilidades).La idea es simple: defines una probabilidad (por ejemplo, 1 de cada 10 veces) y Laravel decidirá aleatoriamente si debe ejecutar el bloque de código que especifiques.
Su sintaxis es limpia y declarativa, en línea con el estilo expresivo de Laravel.
Ejemplo básico:
use Illuminate\Support\Lottery; Lottery::odds(1, 10) ->winner(function () { // Este código se ejecutará el 10% de las veces Log::info('¡Ganó la lotería!'); }) ->loser(function () { // Este bloque se ejecuta en el 90% restante Log::info('No ganó esta vez.'); }) ->choose();
Cómo funciona
La función
odds(1, 10) indica que existe una probabilidad de 1 entre 10 de que el bloque winner() sea ejecutado.Laravel utiliza el generador de números aleatorios de PHP (
random_int()) para garantizar resultados seguros y uniformemente distribuidos.Internamente, el flujo es el siguiente:
Se define la probabilidad (numerador y denominador).
Laravel genera un número aleatorio dentro del rango.
Si coincide con el valor ganador, ejecuta el bloque
.winner()En caso contrario, ejecuta el bloque
si está definido.loser()
Esto elimina la necesidad de escribir manualmente estructuras condicionales con
rand() o mt_rand(), manteniendo el código más legible y expresivo.Ejemplos prácticos de uso
1. Registro parcial de logs
Evita llenar tu base de datos o tus archivos de log con información redundante.
Por ejemplo, puedes registrar solo un pequeño porcentaje de las solicitudes.
Lottery::odds(1, 100) ->winner(fn() => Log::info('Registro de muestreo de rendimiento')) ->choose();
Esto ejecutará el log solo en el 1% de las veces, ideal para métricas de alto tráfico.
2. Envío ocasional de reportes
Puedes usar
Lottery para enviar reportes diagnósticos o realizar análisis de rendimiento de manera controlada.Lottery::odds(1, 50) ->winner(fn() => $this->sendPerformanceReport()) ->choose();
De este modo, solo una de cada 50 solicitudes enviará un reporte, reduciendo la carga sin perder información relevante.
3. Ejecución de pruebas A/B
Si estás implementando pruebas A/B, puedes dividir usuarios de manera aleatoria y balanceada.
if (Lottery::odds(1, 2)->choose()) { // Grupo A $layout = 'nuevo'; } else { // Grupo B $layout = 'clásico'; }
La mitad de las veces se servirá el nuevo diseño y la otra mitad el clásico, sin necesidad de manejar estados o cookies extra.
Métodos disponibles en Lottery
Laravel
Lottery incluye métodos expresivos para definir y controlar su comportamiento:Método Descripción
odds($numerator, $denominator) Define la probabilidad de éxito. winner(Closure $callback) Código que se ejecuta si la “lotería” es ganada. loser(Closure $callback) Código que se ejecuta si la “lotería” no es ganada. choose() Ejecuta la lógica y devuelve true o false.Beneficios
Legibilidad: se entiende fácilmente lo que hace el código.
Menos lógica manual: elimina condiciones redundantes con
.rand()Reutilización: permite centralizar comportamientos probabilísticos.
Seguridad: utiliza generadores aleatorios criptográficamente seguros.
Consideraciones
No se recomienda para lógica crítica o determinista.
Ideal para registros, pruebas, métricas y análisis de comportamiento.
El resultado de
puede guardarse en una variable si necesitas control posterior.choose()
Conclusión
La incorporación de
Lottery en Laravel demuestra nuevamente la filosofía del framework: simplificar tareas comunes sin sacrificar elegancia.Esta característica resulta especialmente útil para desarrolladores que buscan implementar acciones no deterministas de forma limpia y expresiva.
Ya sea para muestreo de datos, pruebas A/B o ejecución aleatoria controlada,
Lottery aporta una herramienta moderna para escribir código más claro y conciso en Laravel 12 y versiones posteriores.