Attribute variables Primary key

Metadata


Esta función metadata() nos permite, obtener información acerca de los atributos de cada clase, su tipo, su nombre, si representa una clave foranea o no, si es requerido o no.

Por lo general esta función es muy usada en:
  • Gestor de base de datos: en funciones de inserción, editado y borrado automático.
  • En las excepciones: para validación de datos requeridos, de tipos de datos, etc.
  • En el ORM: para asignación de componentes (verificar claves foráneas, datos, etc).
  • En la función set attributtes de las clases: para llenar de información los atributos de una clase.

Miremos la función metadata() de la clase person:

//data about the attributes
public function metadata()
{
 return array(
"document" => array("name" => "Document""type" => "bigint"
                      
"required" => "not null""length" => "20""additional" => array()),
 
"name" => array("name" => "Name""type" => "string""required" => "not null"
                      
"length" => "30""additional" => array()),
 
"lastname" => array("name" => "Lastname""type" => "string""required" => "not null",
                      
"length" => "30""additional" => array()),
 
"age" => array("name" => "Age""type" => "int""required" => "not null""length" => "30",
                      
"additional" => array()),
 
"boss" => array("name" => "Boss""type" => "bigint""required" => "null"
                      
"foreign_name" => "b_p""foreign" => "boss"
                      
"foreign_attribute" => "document""length" => "20"
                      
"additional" => array()));
}


Como vemos lo anterior nos muestra un panorama completo de toda la información de cada atributo (meta-datos).

Campos de Metadata:
Se dividen 2 tipos, requeridos y opcionales.
Ejemplo de la información de un solo atributo (atributo boss de la clase person):

"boss" => array("name" => "Boss""type" => "bigint""required" => "null"
                     
"foreign_name" => "boss",  "foreign" => "boss"
                     
"foreign_attribute" => "document""length" => "20",
                     
"additional" => array())

boss: el primer nombre representa el nombre del atributo, debe coincidir con un attribute variable (visto anteriormente) y en caso de representar una columna de una tabla de la base de datos entonces debe coincidir con el nombre de esa columna.

Campos requeridos: son campos que deben tener todos los atributos dentro de esta función:
  • name: es un nombre o titulo que se le da para identificar cada atributo y para que se vea de un nombre mas agradable, en el ejemplo anterior seria: Boss este no debe coincidir con la columna en la base datos
  • type: muestra el tipo del atributo; actualmente solo se soportan los siguientes tipos: -string -date -bool -int -bigint -float - numeric -timestamp
  • required: especifica si un atributo es requerido o no (not null o null respectivamente) por ejemplo cuando se desea ingresar una persona siempre será requerido su documento. Puede ser: -null -not null
  • length: especifica el tamaño maximo de caracteres que se pueden ingresar en este campo, se recomienda que coincida con el maximo de caracteres validos en la base de datos.
  • additional: sirve para especificar comportamientos o características adicionales de los atributos, por ejemplo que el atributo sea autoincrementable, o que haga referencia a la ruta de un archivo, o que se de tipo timestamp.

Valores validos dentro del campo y arreglo "additional":
  • autoincrement: se usa cuando se quiere generar un número entero auto-incrementable (muy usado para claves primarias).
  • file: se usa para indicar que el campo representar la ruta de un archivo (muy usado para imágenes o archivos).
  • timestamp: se usa para guardar la fecha de creación de un objeto (por lo general se crea un campo fecha y adicionalmente se selecciona que es timestamp, este campo guardará la fecha en la que se crean los objetos).
  • html: se usa para indicar que el campo podría guardar código html y con este atributo en el CRUD se despliega la información de manera reducida contenida en un textarea.
  • textarea: se usa para indicar que el campo contiene mucha información y con este atributo en el CRUD se despliega la información de manera reducida contenida en un textarea.

Campos opcionales: campos adicionales que usa G generalmente para validaciones, y otros módulos propios de los componentes del framework.
  • foreign name: (solo usado cuando el atributo representa una clave foránea) representa el nombre de la relación a la cual hace referencia, en el ejemplo anterior el nombre de la relación seria "b_p" (mas adelante se detallara información sobre los nombres de las relaciones).
  • foreign: (solo usado cuando el atributo representa una clave foránea) representa el nombre de la clase con la cual se relaciona "b_p" en este caso "boss"
  • foreign attribute: (solo usado cuando el atributo representa una clave foránea) representa el nombre del atributo de la clase "boss" (en este caso) con el cual se relaciona y con el cual se debe comparar para verificar que si pertenezca a la relación.
  • Values: es usado cuando un campo puede tener unos cuantos resultados preestablecidos, por ejemplo: sexo: Masculino, Femenino - nota final: 1, 2, 3, 4, 5. (cada valor posible se separa por un coma).

Los 3 items FOREIGN anteriores son los que hacen posibles determinar que para que una persona este asignada a algún jefe o que para que pueda existir una relación entre ellos se debe cumplir lo siguiente: $boss->document == $person->boss

Nota: es supremamente importante, que si en algún momento se cambia el comportamiento de un atributo, como por ejemplo: un atributo deja de ser requerido (not null), a vació (null) se deberá modificar MANUALMENTE ese comportamiento en la función anterior en la parte exacta que corresponde a ese atributo. Esto es necesario para que puedan funcionar normalmente las excepciones y todas las demás funciones pre-diseñadas que usan esta función (metadata) que veremos en tutoriales posteriores.
Attribute variables Primary key