Skip to content

9.12.0 - Soporte nativo de DATE, DATETIME y BIGINT en el ORM

Choose a tag to compare

@osumionline osumionline released this 14 Oct 14:49
· 3 commits to main since this release
Immutable release. Only release title and notes can be modified.

Osumi Framework 9.12.0

Esta versión amplía el ORM de Osumi Framework con soporte nativo para columnas SQL DATE, DATETIME y BIGINT, además de reforzar el sistema de migraciones del framework.

DATE y DATETIME

Hasta Osumi Framework 9.11, OField::DATE representaba realmente una columna SQL DATETIME.

A partir de 9.12 ambos tipos quedan separados:

OField::DATE     → SQL DATE      → PHP ?string → Y-m-d
OField::DATETIME → SQL DATETIME  → PHP ?string → Y-m-d H:i:s

Los valores temporales se validan ahora de forma estricta, rechazando fechas u horas imposibles.

Los atributos automáticos #[OCreatedAt], #[OUpdatedAt] y #[ODeletedAt] continúan representando timestamps completos y utilizan internamente DATETIME.

El método OModel::get() y el pipe date de las plantillas admiten ambos tipos temporales.

BIGINT

Se añade el nuevo tipo:

OField::BIGINT

Las columnas BIGINT se representan mediante propiedades PHP ?int y requieren un entorno PHP de 64 bits.

BIGINT también puede utilizarse como clave primaria mediante #[OPK], incluido autoincremento.

No se soportan columnas BIGINT UNSIGNED ni el modificador ZEROFILL.

generateModelFromDB

generateModelFromDB reconoce ahora correctamente:

DATE     → OField::DATE
DATETIME → OField::DATETIME
BIGINT   → OField::BIGINT

Las columnas SQL TIMESTAMP continúan rechazándose al no poder representarse fielmente mediante la semántica DATETIME del ORM.

Migración automática desde versiones anteriores

La versión 9.12.0 incluye un nuevo paso de migración.

Como OField::DATE significaba DATETIME antes de 9.12, los modelos existentes se actualizan automáticamente:

OField::DATE

pasa a:

OField::DATETIME

La migración actúa únicamente sobre referencias PHP reales dentro de src/Model/, conservando comentarios y cadenas de texto.

No se modifica el esquema de la base de datos: los campos existentes mantienen su semántica DATETIME.

Después de la migración, los nuevos usos de OField::DATE representan columnas SQL DATE reales.

Nuevo estado persistente de migraciones

El estado autoritativo del sistema de migraciones deja de almacenarse en:

ofw/tmp/state.json

y pasa a:

.ofw-migrations.json

en la raíz del proyecto.

Este archivo debe versionarse junto con el código de la aplicación.

Para mantener la compatibilidad con proyectos existentes, durante la primera actualización el runner puede seguir leyendo el antiguo ofw/tmp/state.json cuando .ofw-migrations.json todavía no existe.

Este cambio evita que una limpieza de ofw/tmp/ pueda provocar accidentalmente la repetición de una migración ya ejecutada.

Actualización

La actualización puede realizarse normalmente mediante Composer:

composer update osumionline/framework --with-dependencies

La migración 9.12.0 se ejecutará automáticamente cuando corresponda.

Después de actualizar, revisa los modelos modificados y añade .ofw-migrations.json al repositorio de la aplicación.