Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/06/2011, 03:51
elmadno
 
Fecha de Ingreso: febrero-2004
Mensajes: 12
Antigüedad: 20 años, 9 meses
Puntos: 0
Pregunta ¿Como juntar datos de varios Modelos en una vista?

Hola.

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:
dni | nombre | apellidos | idTabla1 | idTabla2 | ... | idTablaN
45    Luis         Pérez        1        -              2
17    Ana         Vilar         40      12              -
12    Pepe        López         -        2              2
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:

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');        
    
}
}
?>
El problema es que no puedo hacer paginación, ni ordenación. Así que pensé en crear el Modelo con un DataSource definido que recoja los datos de otros modelos y así poder usar la paginación y ordenación.

Pero antes quería preguntar a ver si alguien sabe que opción es la mejor.

Última edición por elmadno; 29/06/2011 a las 03:56 Razón: mal formateo tabla