Cómo llenar las listas de selección en CakePHP


Hace poco les hablé sobre FormHelper::input de CakePHP y en los comentarios recibí la pregunta de cómo lograr rellenar con valores de la base de datos la lista de seleccion. El ejemplo que publiqué en esa oportunidad presentaba un conjunto de valores fijos, pero no la manera de obtenerlos de la base de datos. Como cualquiér cosa en CakePHP es bastante sencillo, mira:

Las tablas



  • notas: (id, titulo, texto, tema_id)

  • temas: (id, tema)

Al crear una nota se debe seleccionar 1 tema. Por lo tanto debemos tener un campo de tipo select.

La vista


Como ven, no hay ningún tipo de vudú, en especial con el tipo y los valores del campo tema_id de eso nos encargamos en el controlador.

El Controlador


En el controlador es en donde debes hacer la búsqueda en la base de datos y enviarlo a la vista, para ellos se hace uso de la función find del modelo que nos interesa (en este caso Tema):

La función find(’list’) genera un arreglo con los datos de la manera que los espera el FormHelper, y el nombre de la variable ata (automágicamente) el campo tema_id en la vista a esos datos. Por último, debemos modificar algunas cosas en el Model:

El Modelo


En este caso específico el resultado de la llamada a find(”list”) generará un arreglo parecido a este:
array(
[1] => 1
[2] => 2
)

Lo cual hará que en el campo en la vista se listen números en vez de los nombres de los temas. Para solucionar esto debes agregar al modelo lo siguiente:

Ahora la función find(”list”) generará un arreglo como el siguiente:
array(
[1] => "CakePHP"
[2] => "Desarrollo Web"
)

Si la tabla tema tuviese un campo ‘name’ o ‘title’ CakePHP lo utilizaría en lugar de mostrar el id y no sería necesario definir la variable $displayField en el modelo.

En resumen



  • El form helper de CakePHP conecta las claves foraneas con las variables del mismo nombre (en plural).

  • La función find(’list’) obtiene la información necesaria para rellenar campos de tipo select en las vistas.

  • Si desde el controlador se pasa a la vista una variable el FormHelper lo asociará al campo de la clave foránea, sólo si el nombre de la variable coincide con el nombre de la tabla foránea (tabla temas y variable $temas para el campo tema_id)

¡Sigan horneando!

Entradas que pueden interesarte