Como ejecutar sentencia JOIN en un find() en KumbiaPHP Framework
De KumbiaPHP Framework Wiki
Revisión del 22:11 25 sep 2009 de Al3jandro (discusión | contribuciones)
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
Sumario
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>