Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Cakephp ¿Como juntar datos de varios Modelos en una vista?

Estas en el tema de ¿Como juntar datos de varios Modelos en una vista? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 29/06/2011, 03:51
 
Fecha de Ingreso: febrero-2004
Mensajes: 12
Antigüedad: 20 años, 10 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
  #2 (permalink)  
Antiguo 30/06/2011, 02:02
 
Fecha de Ingreso: febrero-2004
Mensajes: 12
Antigüedad: 20 años, 10 meses
Puntos: 0
Pregunta ¿Ordenación y Paginación?

Acabo de utilizar un DataSource que utiliza arrays en el Modelo. Con esto puedo generar un array en una función y asignar el valor del array devuelto a $this->records en el callback beforeFind($query).

Todo queda más limpio y claro. Pero no funciona la ordenación, ¿donde tengo que cambiar el código para que funcione Paginator? Desde beforeFind hago un var_dump de $query, sin embargo aunque tengo la ordenación y paginación pedido, el array $query está con valor $query['order'] = false.

Etiquetas: cakephp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:43.