Cake PHP 関連するデータのプルダウンリストでの入力フォームを、”name”以外のフィールドについて作る
CakePHP 1.2.3.8166
モデル同士の関連がうまく結びついていれば、入力フォームは自動的に出てきますが、name 以外のフィールドを選択肢にしたい場合、次のようにします。
例 プロジェクト(Project)とドキュメント(Document)が結びついている場合、ドキュメントの追加フォームでプロジェクトのプロジェクト名(Project.name)を入力させたい場合のコントローラーとビューファイル
//document_controller.php 内 function add() { if (!empty($this->data)) { $this->Document->create();
if ($this->Document->save($this->data)) {
$this->Session->setFlash(
__('The Document has been saved', true) ); $this->redirect(array('action'=>'index')); } else { $this->Session->setFlash(__('The Document could not be saved. Please, try again.', true)); } } //ここはリストだけでOK $projects = $this->Document->Project->find('list') }
//add.ctp 内 echo $form->input('projects');
でちゃちゃっと、出してくれます。
しかし、プルダウンリストの中をProject.name以外の選択肢にさせる場合は次のようにします。
例 プロジェクト(Project)とドキュメント(Document)が結びついている場合、ドキュメントの追加フォームでプロジェクトのプロジェクト名ではなく担当教師名(Project.teacher_name)を入力させたい場合のコントローラー
//document_controller.php 内 //Projectから取得するデータを下記のように指定する $projects = $this->Document->Project->find('list', array( 'fields' => array( 'Project.id','Project.teacher_name' ) $this->set(compact('projects')); }
ビューファイルは変更しなくても、これでOKです。
注意:このままだと関連データとしてSaveされないので、Saveの部分を作る必要があります。