Relaciones simples

Preweb-Helper es capaz de manejar automáticamente relaciones simples de tipo 1..N y con un poco de ayuda relaciones 1..N mas complejas, como relaciones por categorías, N..M o N..1

Veremos a continuación un ejemplo con 3 relaciones 1..N

Supongamos el típico ejemplo de la biblioteca. Tenemos 3 tablas, ml_autor, ml_libro y ml_editorial.
Como requerimiento tenemos que las editoriales estan agrupadas en categorias de si mismas, ya que hay casos de editoriales grandes que tienen sellos distintos para diferentes tipos de publicaciones, como la editorial Destino, que es una división de Editorial Planeta para libros fantásticos y de ciencia ficción, y además tiene una subdivisión llamada Destino Joven con los libros para mas jóvenes.

Luego, cada libro está relacionado con un autor (relación 1..N simple) y con una editorial (relación 1..N ordenada por categorías)

Relacion 1..N

Relaciones Simples 1..N Automáticas

Preweb-Helper reconocerá automáticamente una relación y construirá el <select> correspondiente en los formularios si el nombre del campo tiene el siguiente formato: id_<nombre_de_la_tabla_foránea>

Se asumirá entonces que se debe mostrar un select con el valor "nombre" de todos los registros de la tabla indicada y el valor a guardar en la tabla local será el campo "id" de la foránea.

Podemos cambiar estos y otros parámetros por defecto seteando valores por comentarios

Configurando entonces nuestra tabla de libros de una forma similar a la siguiente: CREATE TABLE mlib_libro (
  id bigint(20) NOT NULL auto_increment,
  titulo varchar(50) NOT NULL character set utf8,
  cant_paginas int NOT NULL,
  id_ml_autor bigint NOT NULL,
  editorial bigint NOT NULL,
  PRIMARY KEY (`id`)
)

y solo poniendo el nombre del campo indicando que es una relación bastará para que el helper, tanto modelo como vista, sepan inteprearlo. Dado que en este caso se cumplen las configuraciones por defecto (El texto en la tabla foránea es el campo "nombre", el id es el campo "id" y no se muestra un mensaje vacio)
Pantalla de Nuevo Libro

Si queremos agregar un mensaje del tipo "-- Elija Autor --" debemos agregar en el template algo como "[{345|Elija Autor}]" y definir la tabla de la siguiente manera

CREATE TABLE mlib_libro (
  id bigint(20) NOT NULL auto_increment,
  titulo varchar(50) NOT NULL character set utf8,
  cant_paginas int NOT NULL,
  id_ml_autor bigint NOT NULL COMMENT 'empty:=-- [{345|}] --',
  editorial bigint NOT NULL,
  PRIMARY KEY (`id`)
)
y quedaría algo asi:

Pantalla de Nuevo Libro

Dado que la opción por comentario "Empty" genera un option con value = "" y el campo fue definido como NOT NULL si no es seleccionado un autor y se deja la opción "-- Elija Autor--" al aceptar, producirá un error de validación del tipo "Este campo es obligatorio"

Relaciones 1..N por categorias

En nuestro ejemplo el módulo de editoriales es un módulo autocategorizado, es decir que los propios elementos pueden ser padres o hijos en la estructura, similar al módulo de contenidos. Evidentemente esto significa que dicho módulo tiene una estructura jerárquica y, además que tiene una relación consigo mismo.

Otros tipos de relaciones que no sean simples y directas no son detectadas por helper y deben ser indicadas desde otro lugar.

En este caso, para armar un selector ordenado por categorías debemos indicarlo mediante comentarios. Existe un tipo de campo llamado CatRelation que permite armar este tipo de selectores.

Por lo tanto debemos indicar en el comment "type:=CatRelation;" para decirle al helper que debe utilizar ese tipo de dato ignorando lo que hay en el Type de la tabla.

Luego, este campo necesita los siguientes parámetros

Tambien se aceptan opcionalmente las mismas configuraciones que en una relación normal y mantienen los mismos valores por defecto, en nuestro ejemplo valdrán:

Por lo que no necesitaremos setearlos dado que son los valores por defecto. Finalmente nuestra tabla quedará:

CREATE TABLE mlib_libro (
  id bigint(20) NOT NULL auto_increment,
  titulo varchar(50) NOT NULL character set utf8,
  cant_paginas int NOT NULL,
,   id_ml_autor bigint NOT NULL COMMENT 'empty:=-- [{345|}] --'
  editorial bigint NOT NULL COMMENT 'type:=CatRelation;tableRel:=ml_editorial;self:=1',
  PRIMARY KEY (`id`)
)

Y tendremos un resultado como el siguiente:

Pantalla de Nuevo Libro