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