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

イテル on 12 3, 2009

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

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

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

モデル

class User extends AppModel{
	var $name='User';
	var $belongsTo = array('Group' =>
							array('className' => 'Group',
								  'foreignKey' => 'group_id'
								  ));
}

ここでのポイントは「belongsTo」を指定するところ。
UserとGroupテーブルを関連付けています。
また「foreignKey」ではUsersテーブルの「group_id」フィールドと
Groupsテーブルの「id」を外部キーとして関連付けているところです。

コントローラ

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'));
	}
}

実はここの意味が未だに分かっておりませんが一番はまったところでした。
index()の最初の「$this->set(‘groups’, $this->User->Group->find(‘list’));」の
一文が抜けていたためにエラーが出まくりでした。
この一文はマニュアルに書いていたものをパクリましたが、モデルの「belongsTo」の
指定だけで「Groups」を参照できないようですね。

ビュー

 e($form->input('post.postscategorise_id', array('div' => 'false','label' => false , 'type' => 'select', 'options' => $list)));

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

Comments (3)

 

  1. Samual より:

    I see a lot of interesting content on your blog.
    You have to spend a lot of time writing, i know how to save you a
    lot of time, there is a tool that creates unique, SEO friendly posts in couple
    of minutes, just search in google – laranita’s free content source

  2. Isaac より:

    I read a lot of interesting posts here. Probably you spend a lot of time writing, i know
    how to save you a lot of work, there is an online tool that
    creates high quality, google friendly articles in seconds, just type
    in google – laranitas free content source

Leave a Reply