cakephpで他のテーブルを参照したセレクトボックスを使う

cakephpで他のテーブルを参照したセレクトボックスを使う

どんだけ悩むんだよ!というくらい悩んでようやく解決策を見つけたのでメモをとります。
マニュアルをしっかり読めばかいてましたorz

さて、今回実行したいのは「ユーザー」の新規登録で「グループ」テーブルからセレクトボックスを作るという処理。
ちゃんと理解していないので、ささっと書いていきます。

モデル

[php]
class User extends AppModel{
var $name=’User’;
var $belongsTo = array(‘Group’ =>
array(‘className’ => ‘Group’,
‘foreignKey’ => ‘group_id’
));
}
[/php]
ここでのポイントは「belongsTo」を指定するところ。
UserとGroupテーブルを関連付けています。
また「foreignKey」ではUsersテーブルの「group_id」フィールドと
Groupsテーブルの「id」を外部キーとして関連付けているところです。

コントローラ

[php]
class PostsController extends AppController {
var $name = ‘Users’;
/*新規*/
function index() {
$this->set(‘groups’, $this->User->Group->find(‘list’));
$data = $this->User->Group->find(‘all’);
$list = Set::Combine($data, ‘{n}.Group.id’, ‘{n}.Group.name’);
$this->set(compact(‘list’));
}
}
[/php]
実はここの意味が未だに分かっておりませんが一番はまったところでした。
index()の最初の「$this->set(‘groups’, $this->User->Group->find(‘list’));」の
一文が抜けていたためにエラーが出まくりでした。
この一文はマニュアルに書いていたものをパクリましたが、モデルの「belongsTo」の
指定だけで「Groups」を参照できないようですね。

ビュー

[php]
e($form->input(‘post.postscategorise_id’, array(‘div’ => ‘false’,’label’ => false , ‘type’ => ‘select’, ‘options’ => $list)));
[/php]

ということでようやくセレクトを表示することができました・・・。