Entre las versiones 13.17 y 13.27, Laravel publicó once versiones menores en menos de tres meses, que afectan al enrutamiento, las conexiones a base de datos, las colas, el procesamiento de imágenes, la validación y la seguridad.

refreshForUpdate() in a transaction
DB::transaction(function () use ($product) {
    $product->refreshForUpdate();

    if ($product->stock === 0) {
        throw new RuntimeException('Product is out of stock.');
    }

    $product->decrement('stock');
});

La 13.17 introduce el método metadata() para rutas, que permite adjuntar datos arbitrarios como el título de una página sin recurrir al array de acción; los metadatos definidos a nivel de grupo se propagan automáticamente a las rutas hijas. Esta versión añade también soporte nativo para proxies de agrupación de conexiones de PostgreSQL como PgBouncer, RDS Proxy y Neon, mediante un indicador "pooled" en la configuración junto a una URL "direct" separada, de modo que comandos como las migraciones evitan el pooler.

La 13.18 mejora la observabilidad de las colas: el evento WorkerStopping ahora incluye jobsProcessed y lastJobProcessedAt, y schedule:work captura SIGINT, SIGTERM y SIGQUIT para que una tarea programada en curso pueda terminar antes del apagado, algo útil en entornos como Kubernetes.

La 13.19 añade soporte para el verbo HTTP QUERY mediante Http::query(), el método de colección reduceInto() para mutar directamente un objeto acumulador, y Str::counted() para dar formato a cantidades como "3 orders".

La 13.20 incorpora un componente propio de procesamiento de imágenes, Illuminate\Image, para redimensionar, recortar y convertir formatos, eliminando la necesidad de integrar Intervention Image manualmente. Cada transformación devuelve una nueva instancia inmutable, lo que permite derivar varias variantes a partir de una misma imagen origen. El componente usa de forma opcional Intervention Image v4, que debe instalarse por separado con Composer. Esta versión también añade el atributo #[WithoutMiddleware] para excluir middleware en un método concreto.

La 13.21 añade el atributo #[RouteKey] para definir la columna de vinculación de modelo de ruta en un modelo Eloquent sin sobrescribir un método, más formatos de salida de imagen (PNG, GIF, AVIF, BMP), y una regla de validación base64 conforme a RFC 4648.

La 13.22 introduce Validator::fakeDnsLookups() para evitar que las pruebas con active_url o email:dns fallen por inestabilidad de red, además del atributo #[BindWhen] para vinculaciones de contenedor condicionales evaluadas mediante una closure, lo que requiere PHP 8.5.

La 13.23 añade un driver de logs mensual para aplicaciones que no necesitan rotación diaria, y refuerza la seguridad haciendo que la comparación del secreto del modo mantenimiento use siempre hash_equals(), en lugar de mezclarlo con el operador ==.

La 13.24 añade dominantColor() para extraer un color de marcador de posición mientras carga una imagen, acepta ahora archivos HEIC y HEIF en lugar de rechazarlos, e introduce la regla de validación arrayKeys, que restringe qué claves puede contener un array.

La 13.25 permite pausar o reanudar todas las colas nombradas a la vez con queue:pause --all y queue:resume --all, en lugar de hacerlo una por una. El comando artisan dev pasa a usar una nueva interfaz de terminal basada en @laravel/multiplex, con pestañas separadas para el servidor, la cola, Vite y los logs, y reinicio automático tras un fallo. Image también implementa ahora la interfaz Responsable, por lo que puede devolverse directamente desde una ruta.

La 13.26 añade un driver de sistema de archivos "read-through" que lee primero de un disco principal y recurre a uno antiguo si el archivo no está, promoviendo automáticamente al disco principal los archivos que se consultan, lo que facilita migraciones de almacenamiento graduales. El atributo #[DebounceFor], antes limitado a los jobs, ahora también funciona en los listeners de eventos en cola.

La 13.27, la más reciente, añade la opción de configuración de base de datos mask_bindings_in_exception_messages, que sustituye los valores vinculados por marcadores "?" en los mensajes de QueryException, evitando que datos como correos electrónicos se filtren en los logs, la tabla failed_jobs o herramientas de APM; getBindings() sigue devolviendo los valores reales para depuración. También añade whereBinary(), para comparaciones de columnas sensibles a mayúsculas en MySQL y MariaDB sin SQL crudo, y refreshForUpdate(), un método de Eloquent que refresca una instancia de modelo ya cargada aplicando lockForUpdate() en una sola llamada, evitando tener que volver a consultar el modelo por su clave primaria dentro de una transacción.