Cake PHP 関連モデルの入力フォーム name 以外の値を入れる

PHP

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の部分を作る必要があります。

カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です