CakePHP在下拉列表中显示来自另一个链接表的数据

时间:2011-09-10 13:19:30

标签: php cakephp

我已经构建了一个CakePHP应用程序,可以创建约会,从数据库中的其他表中分配客户端和医生。

在约会添加屏幕上,我希望能够从下拉列表中选择医生姓名(注意,该名称包含两个字段,名字和姓氏,它们也是名为标题的字段,例如Mr)。它应该保存的信息是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 个答案:

答案 0 :(得分:2)

您可以通过在find()中添加'fields'参数来指定要在下拉列表中显示的字段,并且可以在Doctor模型中使用virtualField来获取名称(或全名)。 / p>

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`)"
  );
}

将控制器中的查找('列表')更改为:

$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 :(得分:1)

他们不是随机的。

但你想在find()方法中使用“order”=&gt; array('id'=&gt;'ASC')以按ID排序