Gnuget
Blog de David Valdez

Model::generateList deprecated

Written by Gnuget on 2008.01.07

Con la salida de  la beta cakephp1.2 se anunciaron algunos métodos como deprecated es decir que a  la salida  del release estable estos métodos dejaran de funcionar.

Uno de ellos es generateList();  que era una función que  generaba un arreglo del tipo:

array(


     "0" => "Cero",


    "1" => "uno",


    "2" => "dos"


);


Que era muy útil para llenar de datos los selects  en las vistas.

Ahora al actualizar al beta  muestra un mensaje como este:
('(Model::generateList) Deprecated, use Model::find("list") or Model::find("all") and Set::combine()'


Que nos propone dos soluciones alternativas  al uso de generatelist y ahora daremos un par de ejemplos, uno de cada solución de las que propone:

Usando Model::find('list');

Con la nueva versión de cakephp viene una nueva forma de usar el comando find ahora en base de este  método podremos  remplazar muchos viejos métodos como por ejemplo 'findAll' ,'findCount' y como vemos en este ejemplo generateList de la siguiente forma:

$lista = $this->Model1->find("list");


Y es todo, esto funciona presuponiendo que uno de los elementos de la lista es el identificador y el otro es el campo "name". (Con esta forma no he encontrado la forma de poder decirle  al find que el otro field no sea name)

Usando Model::find("all") y set::combine()

Con este método pude escoger los campos que yo quería para formar la lista y el ejemplo va así:

$lista = $this->Model->find('all','fields' =>  array('Model.id','User.user'));


$lista = Set::combine($lista,"{n}.Model.id","{n}.Model.user");

About the author

50x50_36c0f6c883da1851abcd1ab537cda601_524525911_f838319658.jpg
Gnuget
Programador de tiempo completo,  Con enorme gusto  por el software libre.

Comments

50x50_ff684998eda22799b8bfeae03af05c25_unknown.png
apps/link Friday January 11, 2008 @ 20:30

apps/guest-comment mozart_ar

Lo encuentro bastante práctico a este cambio que se hizo en cakephp. Le da mas flexibilidad.
Me encontré solo con una complicación, al reemplazar generateList() que utilizaban el último parámetro ($groupPath). Los cuales los reemplacé de esta manera:

Suponiendo que tenemos diferentes Operadores de Telefonía Móvil asociados a un País

        $result = $this->MobileOperator->find('all', array (
            'order' => 'Country.name ASC, MobileOperator.name ASC'
        ));
        $keyPath = '{n}.MobileOperator.id';
        $valuePath = '{n}.MobileOperator.name';
        $groupPath = '{n}.Country.name';
        $mobileOperators = Set :: combine($result, $keyPath, $valuePath, $groupPath);

esto nos da el mismo resultado que
$mobileOperators = $this->MobileOperator->generateList((null, 'Country.name ASC, MobileOperator.name ASC', null, null, null, '{n}.Country.name');

Saludos

Write your comment

Your comment: