La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


Presentación del tema: "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."— Transcripción de la presentación:

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'); class c_multiples extends super_controller { public function display() { $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','Datos Multiples'); $this->engine->display('header.tpl'); $this->engine->display('multiples.tpl'); $this->engine->display('footer.tpl'); } public function run() { $this->display(); } $call = new c_multiples(); $call->run(); ?>

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

4 Personas a Cargo del jefe: {$boss->get('name')} - con id: {$boss- >get('id')} {section loop=$boss->components['clerk']['b_p'] name=i} Id: {$boss->components['clerk']['b_p'][i]->get('id')} Nombre: {$boss->components['clerk']['b_p'][i]->get('name')} Salario: {$boss->components['clerk']['b_p'][i]->get('salary')} {/section} Extracción de datos de múltiples tablas (multiples.tpl)

5 Funcion read_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 clerk es 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' Explicación de funciones

6 Funcion get_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 clase boss le 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 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]); Explicación de funciones

8 Agregar un nuevo switche de nivel 1, en la función insert en el db.php con lo siguiente Inserción de un objeto 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 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). Función do_operation y get_data del gestor de base de datos

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

11

12 Inserción de un objeto (código) insert.php <?php require('configs/include.php'); class c_insert extends super_controller { public function add() { $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); } public function display() { $this->engine->display('header.tpl'); $this->engine->display($this->temp_aux); $this->engine->display('insert.tpl'); $this->engine->display('footer.tpl'); } public function run() { 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(); ?>

13 Inserción de un objeto (insert.tpl) Agregar un empleado Ingrese el nombre: Ingrese el id: Ingrese el salario: Ingrese el jefe:

14 $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 Variables de manejo de error del controlador

15 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.

16 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 auxiliars NO ES NECESARIO usar las funciones GET y SET debido a que no son variables principales de la clase.

17 $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) Función delete_data

18 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. Actividad 3 (Edición de datos)

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

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

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

22 actividad3.php caso secundario satisfactorio:


Descargar ppt "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."

Presentaciones similares


Anuncios Google