Objeto Definición
From Tlalokes
Contents |
Descripción
Un objeto definición es una clase que contiene metainformación con las que se puede definir una relación con una base de datos relacional. Tlalokes utiliza anotaciones para definir la relación entre una tabla y sus columnas y una clase y sus propiedades. Consta de la siguiente sintaxis:
/**
* @DefinitionObject( table='users', build )
*/
class UsersDef {
/**
* @DefinitionObject( column='id', type='integer', required, primaryKey, autoIncrement )
*/
public $id;
/**
* @DefinitionObject( column='first_name', type='varchar', size='30', required )
*/
public $first_name;
/**
* @DefinitionObject( column='description', type='longvarchar' )
*/
public $description;
/**
* @DefinitionObject( column='role', type='integer', required )
* @ReferenceDef( table='roles', column='id' )
*/
public $role;
}
Anotaciones
Las anotaciones sirven escencialmente para añadir metadatos al código fuente. En Tlalokes son utilizadas para definir especificaciones a una clase, método o propiedad.
Las anotaciones utilizadas para escribir un objeto definición son DefinitionObject y ReferenceDef.
DefinitionObject
Permite definir las relaciones objeto-tabla.
Propiedades para tabla.
table. Permite relacionar una clase con una tabla. Ejemplo:
/**
* @DefinitionObject( table='roles' )
*/
class RolesDef {
lo anterior permite establecer la relación entre la clase RolesDef y la tabla roles.
build. Permite definir si deseamos que a partir del objeto definición se genere código desde un constructor (builder).
/**
* @DefinitionObject( table='roles', build )
*/
class RolesDef {
Propiedades para columna.
Además de poder relacionar tablas con clases, es necesario relacionar columnas
/**
* @DefinitionObject( table='roles' )
*/
class RolesDef {
/**
* @DefinitionObject( column='id', type='integer', required, autoIncrement, primaryKey )
*/
public $id;
en el ejemplo anterior podemos notar como se estable la relación entre una propiedad de la clase y una columna de la tabla. Además definimos el tipo de dato, si es requerido, y en este ejemplo definimos que el elemento se incrementará automáticamente y será llave primaria.
En DefinitionObject encontraremos las siguiente propiedades:
column.type. Permite definir el tipo de dato, los tipos soportados son:- boolean
- tinyint
- smallint
- integer
- bigint
- double
- float
- real
- decimal
- char
- varchar
- longvarchar
- date
- time
- timestamp
- blob
- clob
size.scale.required.autoIncrement.primaryKey.
ReferenceDef
La anotación ReferenceDef nos permite definir si la columna hace referencia a una columna en otra tabla en la misma base de datos. Por ejemplo, asumamos la existencia de una tabla denominada roles que contiene id, nombre y descripción, y una tabla users que contiene id, nombre, apellidos y rol, para relacionar la columna rol con la tabla roles escribimos la propiedad con el siguiente código, asumiendo la existencia previa del objeto definición RolesDef
/** * @DefinitionObject( column='rol', type='integer', required ) * @ReferenceDef( table='roles', column='id' ) */ public $rol;
con la anterior definición realizamos la referencia. Es importante que los tipos de datos sean identicos.
tablecolumnonDeleteonUpdate
