lunes, 25 de agosto de 2008

Paginate y Find personalizado

Soy un "fan" de la sintaxis "nuevo estilo" del método Model::find($type, $options), que permite crear búsquedas personalizadas. Personalmente me resulta muy útil y cómoda.

Lo que me tenía preocupado hasta ahora era la posibilidad de combinar esto con Controller::paginate, como forma de descargar el Controller de la preparación de condiciones de búsqueda cuando no quieres un findAll puro y duro de los datos.

Estudiando el código en el api resulta que sí es posible indicarle a Paginate que utilice una de estas personalizaciones, aunque para lograr que funcione el código que voy a presentar tienes que bajarte una nighty build o bien el código de controller.php más reciente. Me parece que la cosa está un pelín verde todavía, pero a mí me ha funcionado de esta manera:


function admin_index($mode = 'all') {
$this->User->recursive = 0;
switch ($mode) {
case 'pending':
$this->paginate['User'][0] = 'pending';
break;

default:
# code...
break;
}
$this->set('users', $this->paginate());
}


La clave está en la asignación de un valor al variable $this->paginate['nombre_del_modelo'][0] = 'find_personalizado'. Indicándolo así, Controller::paginate recabará los datos usando esa búsqueda en lugar de findAll.

Recuerda que la versión RC2 todavía no soporta esta capacidad.

No hay comentarios: