我已经构建了一个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>
答案 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排序