Funciones de la capa orm Extraer datos de multiples tablas

Extraer datos de una tabla


Para realizar este ejemplo utilizaremos la tabla 'boss' creada anteriormente con el CRUD.

Lo primero que debemos hacer antes de extraer los datos, es llenar la base de datos con datos ficticios, por tal motivo ingresaremos desde el navegador a la ruta work/admin/control/boss.php

Una vez ahí agregaremos los siguientes datos:
Documento:
1
Nombre: Juan
Cargo: Asistente

Documento: 2
Nombre: Daniel
Cargo: Administrador

Documento: 3
Nombre: Sebastián
Cargo: Jefe de desarrollo

Con los datos anteriores creados, procederemos a crear el controlador y el template para este ejercicio, del siguiente modo:
1) Creamos el controlador example_orm_read.php en la ruta: work/example_orm_read.php con la siguiente información:

<?php

require('./configs/include.php');

class 
c_example_orm_read extends super_controller {

    public function 
display()
    {
        
$options['boss']['lvl2']="all";
        
        
$this->orm->connect();
        
$this->orm->read_data(array("boss"),$options);
        
$boss $this->orm->get_objects("boss");
        
$this->orm->close();
        
$this->engine->assign('boss',$boss);
        
        
$this->engine->assign('title','Example ORM Read Data');
        
$this->engine->display('header.tpl');
        
$this->engine->display('example_orm_read.tpl');
        
$this->engine->display('footer.tpl');
    }
    
    public function 
run()
    {
        
$this->display();
    }
}

$call = new c_example_orm_read();
$call->run();

?>

Explicación del controlador example_orm_read.php:
- Hasta el momento el controlador es muy simple, lo único nuevo que le agregamos son las 5 primeras lineas de la función display donde se utiliza la capa orm, estas son las lineas y las funciones que explicaremos a continuación.

$this->orm->connect(): esta función realiza una conexión a la base de datos (este es el primer paso que debemos realizar para poder sacar todos los jefes que insertamos en la base de datos anteriormente).

$this->orm->read_data(par1, par2, par3): esta función realiza todas las consultas de SELECT de la base de datos y almacena toda la información recogida en forma relacional por dentro del orm, recibe 3 parámetros:

- par1: este parámetro es un array con los nombres de las clases que deseamos leer de la base de datos (en el caso del ejemplo solo deseamos hacer una lectura de la clase 'boss', pero pueden darse múltiples lecturas - ver tutorial siguiente).

- par2: llamado $options, es una matriz o array de 2 dimensiones, por cada clase enviada en el par1, debe existir un $options["nombre_de_la_clase"]["lvl2"] = 'valor'; donde valor corresponde al nombre de la opción de lectura del select del switche de nivel 2 del gestor de base de datos (en el caso de ejemplo como solo hay una lectura de una clase entonces options sera igual a $options["boss"]["lvl2"]="all"; lo que indica que se desea hacer una lectura de la clase boss del caso 'all' donde 'all' representa extraer todos los datos de la tabla 'boss' ver imagen siguiente extraída del archivo db.php).

levels18230.jpg

- par3 (opcional): llamado $cod, también es un array de 2 dimensiones, este parámetro recoge códigos o información adicional que ayuda con SELECTs que dependen de códigos adicionales, por ejemplo: cuando se desea hacer un SELECT de una persona por su documento, aquí se enviaría un parámetro cod con el dato de ese documento (en este ejemplo no se envía este parámetro debido a que no necesitamos seleccionar jefes específicos por códigos si no que los seleccionamos todos - este parámetro sera visto en el tutorial siguiente).

$this->orm->get_objetcs(par1, par2, par3): esta función se encarga de transformar los datos relacionales recogidos por 'read_data' y convertirlos en objetos, al final retorna un objeto con toda la información recogida.

- par1: recibe el nombre de la clase que se quiere transformar a forma objetual (en el caso del ejemplo solo trabajamos con la clase 'boss' y esa es la que deseamos transformar).

- par2 (opcional): llamado $components, es un array de 2 dimensiones que contiene información para "armar" objetos mas complejos, por ejemplo objetos donde existan relaciones o pegar objetos de un tipo a objetos de otro tipo (mas adelante encontraremos un ejemplo donde armaremos jefes y a estos jefes les pegaremos las personas que tienen asignadas).

- par3 (opcional): llamado $auxiliars, es un array, que contiene el nombre de variables auxiliares adicionales que se desean extraer de la base de datos, por ejemplo: algunas veces deseamos extraer todos los datos de una persona, pero adicionalmente deseamos extraer solo el nombre del jefe y debido a que el nombre del jefe no es un atributo propio de la clase person, entonces se debe usar esta variable auxiliars (mas adelante mostraremos su funcionamiento y un ejemplo).

$this->orm->close(): esta función finaliza la conexión a la base de datos (este es el paso final que debemos realizar cuando se hayan terminado todas las consultas y procedimientos a la base de datos).

2) Creamos el template example_orm_read.tpl en la ruta: work/templates/t_dark/example_orm_read.tpl con la siguiente información y con simple section de smarty:

<div class="square">
<table border="0" width="100%" cellpadding="0" cellspacing="10">
<tr><td><b>JEFES DE LA EMPRESA</b></td></tr>
{section loop=$boss name=i}
<tr><td><b>Documento:</b> {$boss[i]->get('document')}<br />
<b>Nombre:</b> {$boss[i]->get('name')}<br />
<b>Cargo:</b> {$boss[i]->get('charge')}
</td></tr>
{/section}
</table>
</div>

Finalmente ingresamos desde el navegador a la ruta: work/example_orm_read.php y debe salir algo como esto:

example9_2.png
Funciones de la capa orm Extraer datos de multiples tablas