Como ejecutar sentencia JOIN en un find() en KumbiaPHP Framework
De KumbiaPHP Framework Wiki
{{#if:
|}}
{{#if:
|}}
Este Artículo esta siendo revisado por los Kumbieros. El ejemplo presente es completamente funcional, pero su redacción debe mejorar | {{{imageright}}} |
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');
}
}
?>
Aquí mostramos los distintos métodos 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 AppController{
public function index(){
$usuario = Load::model('usuario');
$this->inner = $usuario->getInnerJoin();
$this->left = $usuario->getleftJoin();
$this->right = $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): ?>
<tr>
<td><?php echo $i->username ?></td>
<td><?php echo $i->nombres ?></td>
<td><?php echo $i->departamento ?></td>
</tr>
<?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): ?>
<tr>
<td><?php echo $i->username ?></td>
<td><?php echo $i->nombres ?></td>
<td><?php echo $i->departamento ?></td>
</tr>
<?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): ?>
<tr>
<td><?php echo $i->username ?></td>
<td><?php echo $i->nombres ?></td>
<td><?php echo $i->departamento ?></td>
</tr>
<?php endforeach; ?>
</table>
</center>
Screenshots
Realizado por: Hector Rodriguez (Al3jandro)