find('list')に少々ハマる
<?php Model::generateList(); ?>
は1.2betaから非推奨なわけで、
<?php Model::find('list'); ?>
でいいんですが、
{key} や {value} を指定したいとき、
たとえば↓
<?php $results = $this->Category->generateList($criteria, null, null, "{n}.Category.id", "{n}.Category.hoge") ?>
ってみたいなやつは、どうするの?
(Model::generateList) Deprecated, use Model::find("list") or Model::find("all") and Set::combine()
ってメッセージにある。
ほ〜 Set::combine()ってやつを使うのか・・・
Model::find("all")って、Model::findAllでよくないか?
ってことで、以下のようにしてできた。
<?php $results = $this->Category->findAll($criteria, a('Category.id', 'Category.hoge')); if ($results) { $results = Set::combine($results, '{n}.Category.id', '{n}.Category.hoge'); } ?>
$results が空配列のとき、Set::combine でエラー出てしまいます。
なんか面倒くさい・・・か?
というか、
<?php $params = array( 'conditions' => $criteria, 'fields' => array('Category.id', 'Category.hoge'), ); $results = $this->Category->find('list', $params); ?>
上で、fieldsを指定してますが、Model::findの中で
<?php case 'list' : if (empty($query['fields'])) { $query['fields'] = array("{$this->alias}.{$this->primaryKey}", "{$this->alias}.{$this->displayField}"); } if (!isset($query['recursive']) || $query['recursive'] === null) { $query['recursive'] = -1; } $keyPath = "{n}.{$this->alias}.{$this->primaryKey}"; $valuePath = "{n}.{$this->alias}.{$this->displayField}"; break; ?>
っと、強制的に primaryKey と displayField が入るので意味なしです。
気をつけましょう。小一時間ハマりました・・・