Buscar aquí

martes, 11 de noviembre de 2014

Imprimir datos de tipo enum en una lista desplegable en cakephp

Supongamos que se debe tener 'datos conocidos' de una tabla, algo así como en una tabla llamada 'sexo' y los campos son 'Masculino' y 'Femenino', pero todavía no tenemos la tabla. Se puede implementar 'mientras tanto' un campo de tipo enum[1] con esos datos.

Ahora, supongamos que tenemos dos o mas tablas y queremos traer datos de ellas para luego mostrarlos en una lista desplegable, entonces podemos hacer lo siguiente:

En el controlador se define una función llamada addEnums que toma como parámetros el nombre del campo de la tabla y el modelo que se va a usar:

public function addEnums($name, $modelo){
$this->loadModel($modelo);

$type = $this->$modelo->getColumnType($name);
preg_match_all("/'(.*?)'/", $type, $enums);
foreach ($enums[1] as $n){
$data[$n]=$n;
}

$this->set($name, $data);
}

Luego, en el mismo controlador, se llama de la siguiente forma (tengo dos tablas, Users y Players. Users tiene un campo que se llama 'sex' y Player un campo que se llama 'position'):

$this->addEnums('sex','User');
$this->addEnums('position', 'Player');


Y luego, en la vista, se muestran de la siguiente forma:

echo $this->Form->input('sex', array('options'=>$sex));
echo $this->Form->input('position', array('options'=>$position));

Y listo!

[1] http://dev.mysql.com/doc/refman/5.0/en/enum.html