Hola Nicolas.
Para estas cosas suelo crear vistas en la Base de datos y luego crear un modelo a partir de la vista, así puedes usar el paginator sin problemas.
Sino tienes que crearte un paginator personalizado como pone en el manual
http://book.cakephp.org/view/249/Custom-Query-Pagination

Aquí te dejo un recorte de código de como lo hago yo.

$this->Vista->recursive = 1;

$filtro = array('Vista.user_id'=>$user_id,
                        'Vista.empresa_id'=>$empresa_id,
                                        'Vista.nombre like '=>"%".$this->data['Vista']['fdes']."%",
                                        'Vista.estado'=>'T');
if (!empty($this->data['Vista']['fanc']))
           {$filtro = array_merge($filtro,array('Vista.ancho'=>$this->data['Vista']['fanc']));}
...

$this->set('vista', $this->paginate('Vista',$filtro));

Suerte.
Pau.


Nicolas Gonzalez escribió:
les cuento que solo llevo un tiempo trabajando con cake ... el problema que tengo es paginar unos resultados que obtengo de una serie de joins, todos los join los pongo en un arregle junto con las condiciones, en un find 

asi ... al finail esta, $persona = $this->Persona->find('all',$condicionesJoin); de manera que $condicionesJoin, posee el mismo formato de los parametros que deberian ir en el find, la busqueda funciona, que es una serie de condicione, el asunto es que cuando mire los resultados... me dicuenta que necesitaba paginarlos, y eso es lo que no he podido hacer 


if($this->RequestHandler->isPost()) {
$condicionesJoin['joins'] = array();
$condicionesJoin['conditions'] = array();
$condicionesJoin['fields'] = array();
$condicionesJoin['order']=array();
$perfilA = array();
$perfilB = array();
if (!empty($this->data['Busquedas']['perfil'])){
$perfilA['table']= 'perfilpersona';
$perfilA['alias']= 'Perfilpersona';
$perfilA['type']= 'inner';
$perfilA['foreignKey']= false;
$perfilA['conditions']= array('Perfilpersona.persona_id=Persona.id');
array_push($condicionesJoin['joins'],$perfilA);
$perfilB['table']= 'perfil';
$perfilB['alias']= 'Perfil';
$perfilB['type']= 'inner';
$perfilB['foreignKey']= false;
$perfilB['conditions']= array(
'Perfil.id=Perfilpersona.perfil_id',
'Perfil.id'=>$this->data['Busquedas']['perfil']
);
array_push($condicionesJoin['joins'],$perfilB);
}
$areaA = array();
$areaB = array();
if (!empty($this->data['Busquedas']['areaespecializacion'])){
$areaA['table']= 'areaespecializacionpersona';
$areaA['alias']= 'Areaespecializacionpersona';
$areaA['type']= 'inner';
$areaA['foreignKey']= false;
$areaA['conditions']= array('Areaespecializacionpersona.persona_id=Persona.id');
array_push($condicionesJoin['joins'],$areaA);

$areaB['table']= 'areaespecializacion';
$areaB['alias']= 'Areaespecializacion';
$areaB['type']= 'inner';
$areaB['foreignKey']= false;
$areaB['conditions']= array(
'Areaespecializacion.id=Areaespecializacionpersona.areaespecializacion_id',
'Areaespecializacion.id'=>$this->data['Busquedas']['areaespecializacion']
);
array_push($condicionesJoin['joins'],$areaB);
}
$tipomailA = array();
$tipomailB = array();
if (!empty($this->data['Busquedas']['tipomail'])){
$tipomailA['table']= 'personamail';
$tipomailA['alias']= 'Personamail';
$tipomailA['type']= 'inner';
$tipomailA['foreignKey']= false;
$tipomailA['conditions']= array('Personamail.persona_id=Persona.id');
array_push($condicionesJoin['joins'],$tipomailA);

$tipomailB['table']= 'tipomail';
$tipomailB['alias']= 'Tipomail';
$tipomailB['type']= 'inner';
$tipomailB['foreignKey']= false;
$tipomailB['conditions']= array(
'Tipomail.id=Personamail.tipomail_id',
'Tipomail.id'=>$this->data['Busquedas']['tipomail']
);
array_push($condicionesJoin['joins'],$tipomailB);
}
$tipotelefonoA = array();
$tipotelefonoB = array();
if (!empty($this->data['Busquedas']['tipotelefono'])){

$tipotelefonoA['table']= 'personatelefono';
$tipotelefonoA['alias']= 'Personatelefono';
$tipotelefonoA['type']= 'inner';
$tipotelefonoA['foreignKey']= false;
$tipotelefonoA['conditions']= array('Personatelefono.persona_id=Persona.id');
array_push($condicionesJoin['joins'],$tipotelefonoA);

$tipotelefonoB['table']= 'tipotelefono';
$tipotelefonoB['alias']= 'Tipotelefono';
$tipotelefonoB['type']= 'inner';
$tipotelefonoB['foreignKey']= false;
$tipotelefonoB['conditions']= array(
'Tipotelefono.id=Personatelefono.tipotelefono_id',
'Tipotelefono.id'=>$this->data['Busquedas']['tipotelefono']
);
array_push($condicionesJoin['joins'],$tipotelefonoB);
}

$cargoA = array();
$cargoB = array();
if (!empty($this->data['Busquedas']['cargolaboral'])){
$cargoA['table']= 'trabajopersona';
$cargoA['alias']= 'Trabajopersona';
$cargoA['type']= 'inner';
$cargoA['foreignKey']= false;
$cargoA['conditions']= array('Trabajopersona.persona_id=Persona.id');
array_push($condicionesJoin['joins'],$cargoA);
$cargoB['table']= 'cargolaboral';
$cargoB['alias']= 'Cargolaboral';
$cargoB['type']= 'inner';
$cargoB['foreignKey']= false;
$cargoB['conditions']= array(
'Cargolaboral.id=Trabajopersona.cargolaboral_id',
'Cargolaboral.id'=>$this->data['Busquedas']['cargolaboral']
);
array_push($condicionesJoin['joins'],$cargoB);
}
$paisA = array();
$paisB = array();
if (!empty($this->data['Busquedas']['pais'])){
$paisA['table']= 'personatelefono';
$paisA['alias']= 'PersonatelefonoP';
$paisA['type']= 'left';
$paisA['foreignKey']= false;
$paisA['conditions']= array('PersonatelefonoP.persona_id=Persona.id');
array_push($condicionesJoin['joins'],$paisA);
$paisB['table']= 'pais';
$paisB['alias']= 'Pai';
$paisB['type']= 'left';
$paisB['foreignKey']= false;
$paisB['conditions']= array(
'Pai.id=PersonatelefonoP.pais_id',
'Pai.id'=>$this->data['Busquedas']['pais']
);
array_push($condicionesJoin['joins'],$paisB);
}

$provinciaA = array();
$provinciaB = array();
if (!empty($this->data['Busquedas']['provincia'])){
$provinciaA['table']= 'personatelefono';
$provinciaA['alias']= 'Personatelefono';
$provinciaA['type']= 'inner';
$provinciaA['foreignKey']= false;
$provinciaA['conditions']= array('Personatelefono.persona_id=Persona.id');
array_push($condicionesJoin['joins'],$provinciaA);
$provinciaB['table']= 'provincia';
$provinciaB['alias']= 'Provincium';
$provinciaB['type']= 'inner';
$provinciaB['foreignKey']= false;
$provinciaB['conditions']= array(
'Provincium.id=Personatelefono.provincia_id',
'Provincium.id'=>$this->data['Busquedas']['provincia']
);
pr($this->data);
array_push($condicionesJoin['joins'],$provinciaB);
}

if (!empty($this->data['Busquedas']['estado'])){
array_push($condicionesJoin['conditions'],array('Persona.estado_id'=>$this->data['Busquedas']['estado']));
}
$this->Persona->unBindModel(array(
'hasAndBelongsToMany'=>array(
'Areaespecializacion',
'Perfil',
'Tipotelefono',
'Tipodireccion',
'Redsocial',
'Carrera',
'Detalleactividad',
'Cargolaboral'
),
'hasMany'=>array(
'Perfilpersona',
'Areaespecializacionpersona',
'Trabajopersona',
'Carrerapersona',
'Personatelefono',
'Personaredsocial',
'Direccion',
'Personadetalleactividad'
),
)
);
array_push($condicionesJoin['fields'],'DISTINCT Persona.id');
array_push($condicionesJoin['fields'],'Persona.nombrepersona');
array_push($condicionesJoin['order'],'Persona.nombrepersona');

desde ya muchas gracias .
--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a [email protected].
Para anular tu suscripción a este grupo, envía un correo electrónico a [email protected]
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-es?hl=es.

--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a [email protected].
Para anular tu suscripción a este grupo, envía un correo electrónico a [email protected]
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-es?hl=es.

Responder a