Estoy intentando visualizar datos juntos de varios Modelos en una sola Vista, en una tabla, con ordenación, paginación y búsqueda. No puedo hacer vistas ni asociaciones entre tablas de ninguna BD :(.
Así que la idea es mostrar en una sola tabla datos de varias tablas, los cuales a veces se relacionan y otras veces no. Por ejemplo, de varias tablas de usuarios mostrar en una sola fila los que tienen el mismo dni:
Código:
Lo primero que se me ocurrió fue cambiar los datos en el controllador, sin asociarle ningún modelo e importando los modelos que quiero recoger datos:dni | nombre | apellidos | idTabla1 | idTabla2 | ... | idTablaN 45 Luis Pérez 1 - 2 17 Ana Vilar 40 12 - 12 Pepe López - 2 2
Código PHP:
<?php
App::import('Model', 'Usuario');
App::import('Model', 'User');
class UsuariosComunesController extends AppController {
var $name = 'usuarios_comunes';
var $helpers = array('Paginator','Ajax');
var $components = array('RequestHandler');
var $uses = null;
function index() {
$usuarios_comunes = array();
$m1 = new User;
$m2 = new Usuario;
$datos1 = $m1->find('all');
$datos2 = $m2->find('all');
foreach($datos1 as $dato){
$dni = $dato['User']['dni'];
$id = $dato['User']['idUsuario'];
$nombre = $dato['User']['nombre'];
if(!isset($usuarios_comunes[$dni])){
$usuarios_comunes[$dni]['nombre'] = $nombre;
$usuarios_comunes[$dni]['dni'] = $dni;
$usuarios_comunes[$dni]['id2'] = 0;
}
$usuarios_comunes[$dni]['id1'] = $id;
}
foreach($datos2 as $dato){
$dni = $dato['Usuario']['dni'];
$id = $dato['Usuario']['id'];
$nombre = $dato['Usuario']['nombre'];
if(!isset($usuarios_comunes[$dni])){
$usuarios_comunes[$dni]['nombre'] = $nombre;
$usuarios_comunes[$dni]['dni'] = $dni;
$usuarios_comunes[$dni]['id1'] = 0;
}
$usuarios_comunes[$dni]['id2'] = $id;
}
$result = array();
foreach($usuarios_comunes as $user){
$result[]['Usuario'] = $user;
}
//$this->set('usuarios_comunes', $this->paginate($result));
$this->set('usuarios_comunes', $result);
//$this->helpers['Paginator'] = array('ajax' => 'Ajax');
}
}
?>
Pero antes quería preguntar a ver si alguien sabe que opción es la mejor.