Extraer datos de multiples tablas Inserción de un objeto

Extraer datos multiples usando auxiliars


Este ejercicio es muy similar al anterior, queremos extraer datos de 2 tablas: todas las personas y adicional a eso el nombre del jefe de cada persona.

Para realizar el ejercicio anterior podemos hacer una lectura de las 2 tablas (mediante 2 consultas) y crear una relación mediante el uso de components o podemos hacer uso de auxiliars (el tercer parametro que recibe la función que arma los objetos get_objetcs) y hacer una sola consulta que nos traiga la información que se nos pide.

Para llevar a cabo la segunda opción (con 1 sola consulta lo cual es mucho mas optimo), debemos hacer lo siguiente:
  1. Debemos modificar el db.php en la ruta work/modules/db.php buscar la función SELECT y dentro de esta buscar el case nivel 1 person.
    Una vez dentro del case person, debemos agregar justo debajo del case nivel 2 all, un case de nivel 2 con la siguiente consulta:
    case "all_with_boss_name":    
    $info=$this->get_data("SELECT p.*, b.name AS boss_name FROM person p, boss b
     WHERE p.boss = b.document;"
    );
    break;
    El código anterior muestra claramente una sola consulta que retorna todos los datos de person y adicional a esto retorna el nombre del jefe o boss.

  2. Creamos el controlador example_orm_read_auxiliars.php en la ruta work/example_orm_read_auxiliars.php con el siguiente contenido:
    <?php

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

    class 
    c_example_orm_read_auxiliars extends super_controller {

        public function 
    display()
        {
            
    $options['person']['lvl2']="all_with_boss_name";
            
    $auxiliars['person']=array("boss_name");
            
            
    $this->orm->connect();
            
    $this->orm->read_data(array("person"),$options);
            
    $person $this->orm->get_objects("person",NULL,$auxiliars);
            
    $this->orm->close();
            
    $this->engine->assign('person',$person);
            
            
    $this->engine->assign('title','Example ORM Read Data With Auxiliars');
            
    $this->engine->display('header.tpl');
            
    $this->engine->display('example_orm_read_auxiliars.tpl');
            
    $this->engine->display('footer.tpl');
        }
        
        public function 
    run()
        {
            
    $this->display();
        }
    }

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

    ?>

    Como vemos el controlador anterior hace uso del 3er parámetro de la función get_objects() y le envía la variable auxiliars (la cual contiene los nombres de los atributos auxiliares adicionales que van a tener los objeto tipo person, en este caso los objetos tipo person solo contarán con un atributo adicional llamado boss_name el cual debe coincidir exactamente con el atributo extraído en la consulta anterior).

  3. Creamos el template example_orm_read_auxiliars.tpl en la ruta work/templates/t_dark/example_orm_read_auxiliars.tpl con la siguiente información:
    <div class="square">
    <table border="0" width="100%" cellpadding="0" cellspacing="10">
    <tr><td><b>PERSONAS DE LA EMPRESA</b></td></tr>
    {section loop=$person name=i}
    <tr><td><b>Documento:</b> {$person[i]->get('document')}<br />
    <b>Nombre:</b> {$person[i]->get('name')}<br />
    <b>Apellido:</b> {$person[i]->get('lastname')}<br />
    <b>Edad:</b> {$person[i]->get('age')}<br />
    <b>Nombre del jefe:</b> {$person[i]->auxiliars["boss_name"]}
    </td></tr>
    {/section}
    </table>
    </div>

    Como vemos el template anterior extrae los datos del nombre del jefe mediante el código smarty: {$person[i]->auxiliars["boss_name"]}

  4. Finalmente accedemos desde el navegador a la ruta localhost/work/example_orm_read_auxiliars.php y vemos el sistema funcionando.

Nota: para extraer atributos adicionales (auxiliars) no es necesario utilizar la función get
Extraer datos de multiples tablas Inserción de un objeto