Como ejecutar sentencia JOIN en un find() en KumbiaPHP Framework

De KumbiaPHP Framework Wiki
Revisión del 22:04 25 sep 2009 de 190.202.111.149 (discusión) (Página creada con 'La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: ...')
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)

La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: interno, externo, y cruzado.

Debemos crear las dos tablas para realizar con el find unas consultas con el JOIN

Creamos Nuestras tablas y le agregamos registros

CREATE TABLE username(
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(50) NOT NULL,
  usuario_id int(11) NOT NULL,
  PRIMARY KEY (id)
)

-- Volcar la base de datos para la tabla `username`

INSERT INTO username(`id`, `username`, `usuario_id`) VALUES
(1, 'lmarcano', 3),
(2, 'eperez', 1),
(3, 'jlinares', 0);


CREATE TABLE usuario(
  id int(11) NOT NULL AUTO_INCREMENT,
  nombres varchar(100) NOT NULL,
  departamento varchar(100) NOT NULL,
  PRIMARY KEY (id)
)

-- Volcar la base de datos para la tabla `usuario`

INSERT INTO usuario (`id`, `nombres`, `departamento`) VALUES
(1, 'Elena Perez', 'Administracion'),
(2, 'Carlos Beltran', 'Presidencia'),
(3, 'Luis Marcano', 'Auditoria');

Creando nuestros Modelos

Ahora creamos nuestros modelos [app]/models/username.php:

<?php

class Username extends ActiveRecord{

}
?>

[app]/models/usuario.php:

<?php

class Usuario extends ActiveRecord{
    
    public function getInnerJoin(){
        return $this->find('columns: usuario.id, nombres, departamento, username',
                           'join: inner join username on usuario.id = username.usuario_id');
    }
    
     public function getLeftJoin(){
        return $this->find('columns: usuario.id, nombres, departamento, username',
                           'join: left outer join username on usuario.id = username.usuario_id');
    }   

     public function getRightJoin(){
        return $this->find('columns: usuario.id, nombres, departamento, username',
                           'join: right outer join username on usuario.id = username.usuario_id');
    }

}
?>

Aqui mostramos los distintos metodos como podemos utilizar el find, para relacionar dos o mas tablas tablas en una consulta.

Creamos nuestro Controller

[app]/controller/usuario_controller.php:

<?php

class UsuarioController extends ApplicationController{
    
    public function index(){
    
    $this->inner = $this->Usuario->getInnerJoin();
    $this->left = $this->Usuario->getleftJoin();
    $this->right = $this->Usuario->getrightJoin();
    }
}

?>

Creamos nuestra Vista

[app]/views/usuario/index.phtml:

<h2>Consulta con el Inner Join</h2>
<center>
<table border='1'>
    <tr>
        <th>Username</th>
        <th>Nombre del Usuario</th>
        <th>Departamento</th>
    </tr>
    <?php foreach($inner As $i): ?>
    <? echo tr_color('#ff0000', '#fff')?>
    <td><?php echo $i->username ?></td>
    <td><?php echo $i->nombres ?></td>
    <td><?php echo $i->departamento ?></td>
    <?php endforeach; ?>
</table>
<br />
<h2>Consulta con el Left Outer Join</h2>
<table border='1'>
    <tr>
        <th>Username</th>
        <th>Nombre del Usuario</th>
        <th>Departamento</th>
    </tr>
    <?php foreach($left As $i): ?>
    <? echo tr_color('#ff0000', '#fff')?>
    <td><?php echo $i->username ?></td>
    <td><?php echo $i->nombres ?></td>
    <td><?php echo $i->departamento ?></td>
    <?php endforeach; ?>
</table>
<br />
<h2>Consulta con el Right Outer Join</h2>
<table border='1'>
    <tr>
        <th>Username</th>
        <th>Nombre del Usuario</th>
        <th>Departamento</th>
    </tr>
    <?php foreach($right As $i): ?>
    <? echo tr_color('#ff0000', '#fff')?>
    <td><?php echo $i->username ?></td>
    <td><?php echo $i->nombres ?></td>
    <td><?php echo $i->departamento ?></td>
    <?php endforeach; ?>
</table>
</center>

Screenshots

Screenshots.jpg