set::combineはなかなか便利だ
CakePHPで、findした結果をidをキーにして配列にしなおすという作業は割とやる作業かと思います。普通にループさせて組むと以下のような感じでしょうか。テーブルは下記のような感じで。
+-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | data | varchar(255) | NO | | NULL | | +-------+--------------+------+-----+---------+----------------+
コードはここから。
<?php $posts = $this->Post->find('all'); foreach ($posts as $post) $data[$post['Post']['id']] = $post['Post']['data'] ;
まぁこれでも良いのですが、CakePHPにはset::combineという関数が用意されています。上記のコードを以下のように書き直すことができました。
<?php $posts = $this->Post->find('all'); $data = set::combine($posts,'{n}.Post.id','{n}.Post.data');
{n}は渡ってきた配列のキーを指定しているようですね。foreachを使うよりも、こっちの方がコードの見通しがよくてすっきりしますね。
http://book.cakephp.org/ja/view/662/combine
追記
上記の例だとfind('list') でもできるよ!とツッコミが入ったので追記です。確かにそうでした!find('list')を使うとこんな感じですね。
<?php $data = $this->Post->find('list',array('fields'=>array('Post.data')));