Modelos y Constructor de Consultas
Para interactuar con los datos de la base de datos, PIPE proporciona dos métodos para acceder a ellos, el primero es por medio de Modelos referenciados a las tablas de la base de datos, y el segundo es por medio del Constructor de Consultas PIPE.
Veamos algunos ejemplos.
Creación de un Modelo.
PIPE por defecto tiene un directorio específico para guardar los modelos que serán importados en nuestro código automáticamente. Creamos el archivo Usuario.php y lo guardamos en el directorio PIPE/Modelos/Usuario.php.
PIPE soporta 3 tipos de relaciones. Uno a Uno, Uno a Muchos y Muchos a Muchos.
#1 Relación Uno a Uno.
Vamos a relacionar el modelo Usuario con el modelo Documento, asumiendo que un usuario tiene un documento.
Para obtener los datos de esta relación Uno a Uno, lo hacemos de la siguiente manera.
PIPE por defecto determina la llave foránea en función del nombre del modelo a relacionar, debido a esto, se asume que la llave foránea del modelo Documento es usuario_id. Si deseamos omitir esta convención podemos hacerlo de la siguiente manera.
PIPE por defecto determina que el valor de la llave foránea en el modelo Documento coincida con el valor de la llave primaria en el modelo Usuario, sin embargo, podemos definir una llave personalizada en el modelo Usuario de la siguiente manera.
#2 Relación Uno a Muchos.
Vamos a relacionar el modelo Usuario con el modelo Tema, asumiendo que un usuario tiene muchos temas.
Para obtener los datos de esta relación Uno a Muchos, lo hacemos de la siguiente manera.
Como vimos anteriormente, PIPE por defecto determina la llave foránea en función del nombre del modelo a relacionar, debido a esto, se asume que la llave foránea del modelo Tema es usuario_id. Si deseamos omitir esta convención podemos hacerlo de la siguiente manera.
Como vimos anteriormente, PIPE por defecto determina que el valor de la llave foránea en el modelo Tema coincida con el valor de la llave primaria en el modelo Usuario, sin embargo, podemos definir una llave personalizada en el modelo Usuario de la siguiente manera.
Relación inversa de Uno a Uno y Uno a Muchos.
Podemos acceder a los datos relacionados en los modelos Documento y Tema usando el atributo perteneceAUno.
Para obtener los datos de esta relación inversa de Uno a Uno y Uno a Muchos lo hacemos de la siguiente manera.
PIPE por defecto determina la llave foránea en función del nombre del modelo a relacionar, debido a esto, se asume que la llave foránea de los modelos Documento y Tema son usuario_id. Si deseamos omitir esta convención podemos hacerlo de la siguiente manera.
PIPE por defecto determina que el valor de la llave foránea en los modelos Documento y Tema coincida con el valor de la llave primaria en el modelo Usuario, sin embargo, podemos definir una llave personalizada en el modelo Usuario de la siguiente manera.
#3 Relación Muchos a Muchos.
Para definir la relación de Muchos a Muchos se necesitan tres tablas. Para nuestro ejemplo vamos a utilizar la tabla usuarios, roles y role_usuario.
Vamos a relacionar el modelo Usuario con el modelo Role en una relación de Muchos a Muchos, asumiendo que un usuario tiene muchos roles y un rol pertenece a muchos usuarios.
Para obtener los datos de esta relación Muchos a Muchos lo hacemos de la siguiente manera.
También podemos obtener los datos de la relación en la tabla role_usuario de la siguiente manera.
PIPE por defecto determina que el nombre de la tercera tabla (tabla de unión) este compuesto por los nombres en orden alfabético de los modelos relacionados, debido a esto, se asume que el nombre de la tercera tabla sea role_usuario. Si deseamos omitir esta convención podemos hacerlo de la siguiente manera.
PIPE por defecto determina que los nombres de las llaves foráneas en la tabla role_usuario (tabla de unión) sean role_id y usuario_id. Si deseamos omitir esta convención podemos hacerlo de la siguiente manera.
De la misma manera, podemos omitir estas convenciones para la relación inversa de Muchos a Muchos en el modelo Role.
El Constructor de Consultas PIPE nos permite estructurar sentencias SQL por medio de métodos heredados en la clase PIPE.
A continuación, se muestra un listado de los 35 métodos disponibles en el Modelo y el Constructor de Consultas PIPE para estructurar sentencias SQL.
| Método | Descripción |
|---|---|
| actualizar | Actualiza un registro en la base de datos. |
| actualizarOInsertar | Actualiza o inserta un nuevo registro en la base de datos. |
| agruparPor | Agrupa registros que tienen los mismos valores. |
| alias | Establece un alias al nombre de la tabla. |
| autenticar | Autentica un registro en la base de datos. |
| consulta | Realiza una consulta SQL en español. |
| consultaNativa | Realiza una consulta SQL nativa. |
| contar | Obtiene la cantidad general o especifica de registros retornados. |
| decrementar | Decrementa el valor del campo especificado. |
| distinto | Elimina duplicados del conjunto de resultados. |
| donde | Establece una condición en la consulta SQL. |
| eliminar | Elimina un registro en la base de datos. |
| encontrar | Obtiene una instancia del Constructor de Consultas con los datos asociados a la llave primaria. |
| existe | Verifica que la consulta SQL ha retornado un resultado. |
| incrementar | Incrementa el valor del campo especificado. |
| insertar | Inserta un nuevo registro en la base de datos. |
| insertarObtenerId | Inserta un nuevo registro en la base de datos y obtiene el último id generado. |
| limite | Limita el número de registros retornados en la consulta SQL. |
| maximo | Obtiene el valor máximo del campo especificado. |
| minimo | Obtiene el valor mínino del campo especificado. |
| noExiste | Verifica que la consulta SQL no ha retornado un resultado. |
| obtener | Obtiene el resultado de una consulta SQL. |
| ordenarPor | Ordena el resultado de la consulta SQL. |
| primero | Obtiene los primeros registros retornados en la consulta SQL. |
| promedio | Obtiene el valor promedio del campo especificado. |
| seleccionar | Establece los campos que serán seleccionados. |
| suma | Obtiene la suma del campo especificado. |
| tabla | Establece el nombre de la tabla en el Constructor de Consultas. |
| teniendo | Establece una condición a una función de agregación. |
| todo | Obtiene todos los datos de la tabla seleccionada. |
| ultimo | Obtiene los últimos registros retornados en la consulta SQL. |
| unir | Combina registros de una o más tablas relacionadas. |
| unirDerecha | Combina registros de una o más tablas relacionadas obteniendo todos los registros de la tabla de la derecha. |
| unirIzquierda | Combina registros de una o más tablas relacionadas obteniendo todos los registros de la tabla de la izquierda. |
| vaciar | Elimina todos los registros en la tabla y reinicia el contador auto incrementable. |
La clase PIPE, proporciona constantes que permiten obtener información del ORM PIPE.
A continuación, se muestra un listado de las 5 constantes disponibles en la clase PIPE.
| Constante | Descripción |
|---|---|
| PIPE::ARREGLO | Indica el retorno de resultados de una consulta SQL como un arreglo. |
| PIPE::AUTOR | Indica el autor del ORM PIPE. |
| PIPE::JSON | Indica el retorno de resultados de una consulta SQL como una cadena de json. |
| PIPE::OBJETO | Indica el retorno de resultados de una consulta SQL como un objeto. |
| PIPE::VERSION | Indica la versión actual del ORM PIPE. |
Si utilizas el Modelo para interactuar con los datos de la base de datos, tendrás la ventaja de poder omitir las convenciones que tiene el ORM PIPE y adaptarse a la estructura que tenga tu tabla en la base de datos, ya que el Constructor de Consultas se adapta por defecto a las convenciones.