Ir al contenido

El medio de los artesanos de la web jueves, 12 de noviembre de 2026

MailStudio
Back-end

Laravel 13.42 añade lectura tipada de UUID y ULID y un evento para migraciones fallidas

Laravel 13.42, publicado el 10 de noviembre de 2026, añade los métodos uuid() y ulid() para leer datos de la petición, un evento MigrationFailed y un motivo detallado para las tareas programadas omitidas. Pequeñas mejoras que ahorran código repetitivo a los equipos…

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.

NovedadPull requestAlcance
Método uuid()#62327Trait InteractsWithData, seis clases afectadas
Método ulid()#62348Mismo trait, continuación lógica
Evento MigrationFailed#62342Migrador, disparado antes de relanzar la excepción
ScheduledTaskSkipReason#62294Evento 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(),
    ]);
});
El motivo añadido a 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 --version

El 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.

Compartir LinkedIn Bluesky Hacker News E-mail

Leer también