Laravel 13.42 salió el 10 de noviembre de 2026, sin grandes anuncios, pero con cuatro novedades que los equipos que mantienen aplicaciones en producción notarán enseguida: lectura tipada de UUID y ULID desde los datos de la petición, un evento que se dispara cuando una migración falla, y un motivo explícito para cada tarea programada omitida. Esta versión menor de la rama 13.x no incluye cambios incompatibles.
Leer un UUID o un ULID desde la petición sin código repetitivo
Hasta ahora, extraer un UUID de los datos de la petición obligaba a llamar a Uuid::fromString() y comprobar a mano la ausencia de valor. Los nuevos métodos uuid() y ulid() del trait InteractsWithData hacen ambas cosas de una vez, y están disponibles en Request, Fluent, ValidatedInput, UriQueryString, ComponentAttributeBag y CommandInput.
$request->uuid('order_id'); // Ramsey\Uuid\UuidInterface|null
$request->ulid('order_id'); // Symfony\Component\Uid\Ulid|null
$request->safe()->uuid('order_id');Una entrada ausente o vacía devuelve null en ambos casos; un valor inválido lanza una excepción en lugar de dejar pasar una cadena incorrecta. Para ulid(), el equipo eligió deliberadamente new Ulid($value) en vez de Ulid::fromString(), ya que esta última también acepta otros formatos y podría convertir silenciosamente un UUID en un ULID distinto.
| Novedad | Pull request | Alcance |
|---|---|---|
Método uuid() | #62327 | Trait InteractsWithData, seis clases afectadas |
Método ulid() | #62348 | Mismo trait, continuación lógica |
Evento MigrationFailed | #62342 | Migrador, disparado antes de relanzar la excepción |
ScheduledTaskSkipReason | #62294 | Evento ScheduledTaskSkipped, nueva propiedad reason |
Un evento para reaccionar cuando una migración falla
El evento MigrationFailed envuelve cada migración en un bloque try/catch: si falla, el evento se dispara y la excepción sigue después su curso normal. El autor de la función citaba el caso de las instrucciones ALTER en MySQL, que no se pueden revertir: un despliegue fallido puede dejar la base de datos parcialmente modificada, y esta señal permite reaccionar antes de que alguien lo descubra a mano.
En MySQL, una instrucción ALTER que falla a mitad de una migración deja la base de datos parcialmente modificada y sin posibilidad de revertirla: el nuevo evento MigrationFailed da por fin un punto de enganche para reaccionar de inmediato.
Event::listen(function (MigrationFailed $event) {
Artisan::call('down');
Queue::pauseAll();
Log::channel('slack')->critical("Migration [{$event->name}] failed on ".config('app.name'), [
'exception' => $event->exception->getMessage(),
]);
});ScheduledTaskSkipped (ScheduledTaskSkipReason) responde a una queja habitual: saber por qué una tarea programada no se ejecutó, sin tener que revisar los registros a mano. Útil para distinguir un solapamiento, una ventana de mantenimiento o un servidor que simplemente no tenía el liderazgo.Sin urgencia, pero a tener en cuenta
Nada en esta versión obliga a una actualización inmediata: son funciones aditivas, no correcciones de seguridad. El comando habitual basta para aprovecharlas en un proyecto existente sobre la rama 13.x.
composer update laravel/framework
php artisan --versionEl mismo cuidado que en el mantenimiento de los runtimes
Este tipo de versión menor refleja una disciplina que también se ve en el lado del runtime: la publicación de seguridad de Node.js del 11 de noviembre recuerda que mantener una pila back-end no se limita a los parches de seguridad, también incluye este tipo de pequeñas comodidades que reducen la deuda técnica con el tiempo. Los equipos que ya seguían las novedades de supervisión de colas de la versión 13.40 reconocerán aquí la misma lógica de instrumentación, aplicada esta vez a las migraciones y al planificador.
Lo que hay que recordar
Laravel 13.42 no es un hito mayor, pero sus cuatro novedades —lectura tipada de UUID y ULID, evento de migración fallida, motivo de tarea omitida— responden cada una a un problema concreto ya visto en producción. Una actualización de bajo riesgo, que conviene planificar en el próximo ciclo de mantenimiento sin prisa.
Es exactamente el tipo de versión que muchos equipos se saltan por falta de un changelog vistoso, y es un error. En un proyecto de cliente, perdí más de una hora intentando averiguar por qué una tarea programada se saltaba un día de cada dos, antes de darme cuenta de que simplemente se solapaba con su ejecución anterior. Un evento con un motivo explícito habría resuelto eso en cinco minutos. — Simon Janvier
Para profundizar: el detalle de las pull requests está disponible en el repositorio laravel/framework en GitHub.
