lunes, 2 de junio de 2008

Problemas con find('list') y generateList deprecado en CakePHP 1.2

La verdad a la hora de crear un arreglo de opciones para una lista (select en HTML) tuve problemas ya que en la versión 1.2 de CakePHP la función generateList está deprecada.

Bueno la primera opción que ví fue la de utilizar la función find('list'), pero los resultados no fueron los más deseados. Buscando en los grupos de cake tratando de encontrar alguna sintaxis específica para esta función me encontré con otra solución, que aquí les dejo:

2.    $foo = $this->Usuario->TipoUsuario->find('all');
3. $tipo_usuarios = Set::combine($foo, '{n}.TipoUsuario.id', '{n}.TipoUsuario.nombre');
4. //Si ese objeto tiene una relacion por ejemplo de $belongsTo con el modelo
5. //actual, por ejmplo Usuario con TipoUsuario podemos setear directamente
6. //la lista con la siguiente funcion
7. $this->set(compact('tipo_usuarios'));

Actualización
Con el aporte que hizo José Lorenzo Rodrígues en sus comentarios la otra opción con la función find('list') quedaria así:

    $this->Usuario->TipoUsuario->displayField = 'nombre';
$tipo_usuarios = $this->Usuario->TipoUsuario->find('list');
//Si ese objeto tiene una relacion por ejemplo de $belongsTo con el modelo
//actual, por ejmplo Usuario con TipoUsuario podemos setear directamente
//la lista con la siguiente funcion
$this->set(compact('tipo_usuarios'));


Saludos ...

4 comentarios:

Unknown dijo...

Eso e innecesario si pones en tus modelos:
var $displayField = 'nombre';

o caulquiera sea el campo que deseas mostrar en tus selects... De esa manera lo invocas find('list') y listo!

Danilo Domínguez P. dijo...

José: gracias por el aporte nuevamente. De verdad colaborativamente se aprende mucho más rápido.

Saludos ...

Josepzin dijo...

El displayField también es innecesario si usamos "name" o "title" en lugar de "nombre".

Y aqui entramos en otro tema: ¿Usamos español o ingles para los nombres de campos?

Danilo Domínguez P. dijo...

josepzin: la verdad esa es otra de las convenciones de cake, pero en particular no me gusta crear una aplicación que siga todas las convenciones, porque puede hacerse predecible, lo que como lo dije ántes no me gusta. Por eso prefiero colocar aunque sea una o dos líneas de más. Agradecer que cake da la flexibilidad de cambiarlo.

Saludos ...