2011-09-10 4 views
0

データベースの他のテーブルから割り当てられたクライアントと医者の両方を持つ予定を作成するCakePHPアプリケーションを作成しました。CakePHPはドロップダウンで別のリンクテーブルのデータを表示します

予定の追加画面で、ドロップダウンから医師の名前を選択できるようにしたいと思います(名前は名と姓の2つのフィールドで構成されています。ただし、それは2つのテーブルがリンクされている方法であるので、doctor_idである必要があります。

私は、私の見解に以下を追加しました:私のコントローラで

<?php echo $this->Form->input('doctor_id',array('label'=>'<strong>Choose Doctor</strong>'),$doctors); ?>

、その後を:

$this->set('doctors', $this->Appointment->Doctor->find('list'));

ただし、これはデータベースからランダムな要素のリストを作成します。これをどのように機能させることができますか?ドロップダウンは次のようなものです:

<select> 
<option value="1">Mr. John Doe</option> 
<option value="2">Mrs. Jane Doe</option> 
</select> 

答えて

2

によってそれらをソートするために、あなたはあなたがしたいフィールドを指定することができ、あなたのfind()メソッドで

しかし、あなたが使用したい「ため」=>配列(「ID」=>「ASC」)ドロップダウンリストに 'fields'パラメータをfind()に追加すると、DoctorモデルのvirtualFieldを使用して名前(またはフルネーム)を取得できます。

doctor.php:

public function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct($id, $table, $ds); 

    // This is for MySQL, change for whatever DB flavour you're using. 
    $this->virtualFields = array(
     'name' => "CONCAT(`{$this->alias}`.`prefix`, ' ', `{$this->alias}`.`firstname`, ' ', `{$this->alias}`.`lastname`)" 
); 
} 
にあなたのコントローラであなたのfind( 'リスト')に変更し

:あなたはもちろん、 '注文' パラメータを追加することができます

$this->set('doctors', $this->Appointment->Doctor->find(
    'list', 
    array(
    'fields' => array('Doctor.name') 
) 
); 

...

$this->set('doctors', $this->Appointment->Doctor->find(
    'list', 
    array(
    'fields' => array('Doctor.name'), 
    'order' => array('Doctor.firstname', 'Doctor.lastname') 
) 
); 

希望に役立ちます。

1

ランダムではありません。 ID

関連する問題