1 / 22

Programación por Capas: Capas gestor de base de Datos y ORM II

Programación por Capas: Capas gestor de base de Datos y ORM II. Diseño y Construcción de Productos de Software Daniel Correa Botero Jeferson David Ossa Universidad Nacional de Colombia Sede Medellín 2013. Extracción de datos de múltiples tablas (example10.php) Código. <?php

amena
Download Presentation

Programación por Capas: Capas gestor de base de Datos y ORM II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programación por Capas:Capas gestor de base de Datos y ORM II Diseño y Construcción de Productos de Software Daniel Correa Botero Jeferson David Ossa Universidad Nacional de Colombia Sede Medellín 2013

  2. Extracción de datos de múltiples tablas (example10.php)Código <?php require('./configs/include.php'); classc_multiplesextendssuper_controller { publicfunctiondisplay() { $cod['boss']['id']=1; $options['boss']['lvl2']="one"; $cod['clerk']['boss']=1; $options['clerk']['lvl2']="by_boss"; $components['boss']['clerk']=array("b_p"); $this->orm->connect(); $this->orm->read_data(array("boss","clerk"),$options,$cod); $boss = $this->orm->get_objects("boss",$components); $this->engine->assign('boss',$boss[0]); $this->engine->assign('title','DatosMultiples'); $this->engine->display('header.tpl'); $this->engine->display('multiples.tpl'); $this->engine->display('footer.tpl'); } publicfunctionrun() { $this->display(); } } $call = new c_multiples(); $call->run(); ?>

  3. Extraer el jefe con el documento 1 y todas las personas a su mando

  4. Extracción de datos de múltiples tablas (multiples.tpl) <divclass="square"> <tableborder="0" width="100%" cellpadding="0" cellspacing="10"> <tr><td><b>Personas a Cargo del jefe: {$boss->get('name')} - con id: {$boss->get('id')}</b></td></tr> {sectionloop=$boss->components['clerk']['b_p'] name=i} <tr><td><b>Id:</b> {$boss->components['clerk']['b_p'][i]->get('id')}<br /> <b>Nombre:</b> {$boss->components['clerk']['b_p'][i]->get('name')}<br /> <b>Salario:</b> {$boss->components['clerk']['b_p'][i]->get('salary')} </td></tr> {/section} </table> </div>

  5. Explicación de funciones Funcionread_data:$this->orm->read_data(array("boss","person"),$options,$cod); Recordemos que esta función recibe 3 parámetros:- par1(vector con nombres de las clases o tablas que se desean leer): en el ejemplo anterior solo deseábamos hacer una lectura de boss, pero en este ejemplo debemos hacer 2 lecturas una de boss para sacar la info del jefe con documento 1, y otra de person para sacar la info de todas las personas que tiene como jefe aquel con documento 1 - par2 ($options):enviamos los lvl2 diciendo que para ‘boss’ deseamos hacer una lectura de un solo boss por documento y para ‘clerk’ por el código del boss (en el caso de boss esta lectura es en base a su id donde sea igual a 1, en el caso de clerkes en base al atributo boss donde este sea igual a 1). - par3 ($cod): se envían los códigos de id y boss respectivamente para las clases 'boss' y ‘clerk'

  6. Explicación de funciones Funcionget_objetcs: $boss = $this->orm->get_objects("boss",$components); Recordemos que esta función retorna objetos de la clase indicada por par1 y cuenta con 3 parámetros:- par1:nombre de la clase que se desea retorna en forma objetual (en este caso 'boss' ya que deseamos retornar un jefe con sus personas a cargo asignadas por dentro - pero también podría ser al contrario retornar las personas y a cada persona asignarle por dentro los datos de su jefe). - par2 ($components) $components['boss']['clerk']=array("b_p");: Debe completarse de la siguiente manera: $components[‘nombre_de_la_clase_a_la_que_se_le_desea_asignar_otra']['nombre_de_la_clase_que_se_desea_agisnar'] = array('lista_de_las_relaciones_entre_las_clases')De este modo en el ejemplo actual estamos indicando que a la clasebossle queremos asignar elementos de la clase clerk, y que para poder asignar estos elementos se debe hacer una verificar de la relación b_p (esta relación se creo y se explico anteriormente en tutoriales de la capa clases). - par3 ($auxiliars): será visto en tutoriales posteriores.

  7. Explicación de funciones • De esta manera ya tenemos una lista de jefes con sus personas a cargo asignadas, como en este ejemplo sabemos que solo existe un jefe con id 1, entonces simplemente asignamos el jefe de la primera posición (posición cero) $this->engine->assign('boss',$boss[0]);

  8. Inserción de un objeto • Agregar un nuevo switche de nivel 1, en la función insert en el db.php con lo siguiente case "clerk": switch($options['lvl2']) { case "normal": $id=mysql_real_escape_string($object->get('id')); $name=mysql_real_escape_string($object->get('name')); $salary=mysql_real_escape_string($object->get('salary')); $boss=mysql_real_escape_string($object->get('boss')); $this->do_operation("INSERT INTO clerk (id, name, salary, boss) VALUES ('$id', '$name', '$salary', '$boss');"); break; } break;

  9. Función do_operation y get_data del gestor de base de datos • Estas funciones pertenecen a la clase gestor de base de datos y son usadas dentro del db.php, ambas reciben un solo parámetro que es la consulta sql que se desea ejecutar • La función get_data se utiliza cuando se desea obtener información de la base de datos (es usada en todos los selects) • La función do_operation se usa para realizar el resto de operaciones en la base de datos las cuales no retornan información (es usada es insert, delete, update).

  10. Inserción de un objeto (insert.php)

  11. <?php require('configs/include.php'); classc_insertextendssuper_controller { publicfunctionadd() { $clerk = new clerk($this->post); if(is_empty($clerk->get('id'))) {throw_exception("Debe ingresar un id");} $this->orm->connect(); $this->orm->insert_data("normal",$clerk); $this->orm->close(); $this->type_warning = "success"; $this->msg_warning = "Persona agregada correctamente"; $this->temp_aux = 'message.tpl'; $this->engine->assign('type_warning',$this->type_warning); $this->engine->assign('msg_warning',$this->msg_warning); } publicfunctiondisplay() { $this->engine->display('header.tpl'); $this->engine->display($this->temp_aux); $this->engine->display('insert.tpl'); $this->engine->display('footer.tpl'); } publicfunctionrun() { try {if (isset($this->get->option)){$this->{$this->get->option}();}} catch (Exception $e) { $this->error=1; $this->msg_warning=$e->getMessage(); $this->engine->assign('type_warning',$this->type_warning); $this->engine->assign('msg_warning',$this->msg_warning); $this->temp_aux = 'message.tpl'; } $this->display(); } } $call = new c_insert(); $call->run(); ?> Inserción de un objeto (código)insert.php

  12. Inserción de un objeto (insert.tpl) <divclass="square"> <formaction="{$gvar.l_global}insert.php?option=add" method="post"> <tablewidth="100%" border="0" cellpadding="0" cellspacing="5"> <tr><td> <b>Agregar un empleado</b><br /><br /> <b>Ingrese el nombre:</b> <input type="text" name="name" /><br /> <b>Ingrese el id:</b> <input type="text" name="id" /><br /> <b>Ingrese el salario:</b> <input type="text" name="salary" /><br /> <b>Ingrese el jefe:</b> <input type="text" name="boss" /><br /> <input class="btnbtn-primary" type="submit" value="Registrar" /> </td></tr></table> </form> </div>

  13. Variables de manejo de error del controlador • $this->type_warning= por defecto contiene el valor de error (color rojo) pero puede tomar los valores de: (information- success - error - alerts) • $this->msg_warning= por defecto es vacio y se le debe asignar el mensaje que va a acompañar el tipo de error. • $this-> error = por defecto es 0 y en caso de encontrar un error se debe cambiar a 1

  14. Explicación función insert_data $this->orm->insert_data(par1, par2): - par1: recibe un string, el case de LVL2 del tipo de insert que se desea realizar, en el caso del ejemplo es igual a "normal" que es el caso que creamos anteriormente en el db.php para inserción de datos de clerk). - par2: recibe el objeto que se va a insertar en la base de datos (en este caso $clerk).Notas (ejercicio propuesto):- El ejemplo se podría modificar de tal manera que cuando se inserte un dato y este sea invalido se vuelva a cargar la información en el formulario, para esto se agrega la línea $this->engine->assign('object',$this->post); después de this->error==1 Y ademas se modifica el insert.tpl para que haga un if en cada input preguntando si esta seteado “object” y en caso afirmativo muestre los datos.

  15. Función update_data $this->orm->update_data(par1, par2): - par1: recibe un string el LVL2 al cual se desea acceder a hacer el udpate (por lo general se usa el el case "normal" y se crea un switche de nivel 2 en los updates en el gestor de base de datos con ese caso normal). - par2: recibe el objeto que se va a editar en la base de datos. Nota: es importante resaltar que si se desea editar un objeto y se permite editar la clave primaria, entonces en este caso se deberá enviar la clave primaria inicial en una variable adicional (en este caso se usa el vector auxiliars definido en todas las clases) esto para poder hacer la edición. Por ejemplo: supongamos que deseamos editar el documento de una persona, para ese fin es importante guardar en $clerk->auxiliars[‘id_aux’] el id inicial y en $clerk->id el nuevo documento Para acceder y asignar valores a auxiliarsNO ES NECESARIO usar las funciones GET y SET debido a que no son variables principales de la clase.

  16. Función delete_data • $this->orm->delete_data(par1, par2) - par1: recibe un string con el case de LVL2 que se desea realizar el borrado (normalmente se usa "normal" que es el caso básico que se crea en db.php en cada clase para el borrado de datos). - par2: recibe el objeto que se va a borrar de la base de datos (por lo general se envía un objeto solo con la clave primaria asignada)

  17. Actividad 3 (Edición de datos) • Crear un controlador, que permita ingresar un id de una clerk, luego en base a ese id muestre la información del clerk y finalmente permita editarla. • Si se ingresa un documento invalido, el controlador debe mostrar un mensaje indicando el error. • En la parte de la edición de la persona no es necesario validar datos.

  18. actividad3.php caso inicial (pantallazo por defecto):

  19. actividad3.php caso inicial con id erróneo:

  20. actividad3.php caso inicial satisfactorio (caso secundario edición de datos)

  21. actividad3.php caso secundario satisfactorio:

More Related