我正在CakePHP中构建一个简单的预订系统,使用3个表来创建预订。他们是客户、医生和预约。客户和医生可以有多个预约,但一个预约只能有一个客户和一个医生。
我已经建立了创建和编辑客户端部分很好,但努力建立创建预约,并将它们链接到医生和客户端。我已经在模型中设置了关系,它们可以很好地提取数据,所以我知道它们按预期工作。
例如,如果我想为ID为1的客户预约,我会访问:/appointments/add/1
然后在视图中,它会有这样的内容:
<h1>Book Appointment <em>for</em> <?php echo $client['Client']['firstname'] . " " . $client['Client']['lastname']; ?></h1>
<?php echo $this->Form->create('Appointment', array('url' => array('admin'=>true,'controller'=>'appointments','action'=>'add',$client_id))); ?>
<fieldset id="post-form">
<ul>
<li>
<?php echo $this->Form->input('client_id', array('type' => 'hidden','value'=>$client_id)); ?>
<?php echo $this->Form->input('doctor_id', array('label' => '<strong>Choose Doctor</strong>',$doctors)); ?>
</li>
<li>
<?php echo $this->Form->input('datetime', array('label' => '<strong>Date and Time</strong>')); ?>
</li>
<li>
<?php echo $this->Form->input('treatment', array('label' => '<strong>Treatment</strong>')); ?>
</li>
<li class="sep clearfix">
<input class="submit" type="submit" name="submit" value="Book Appointment" />
</li>
</ul>
</fieldset>
<?php echo $this->Form->end(); ?>
因此,正如您所看到的,我希望使用传递的id(在约会表中称为client_id)在头中显示客户端的名称。你应该可以从下拉菜单中选择医生的名字。
这是目前为止我的控制器动作:
function admin_add($client_id)
{
$this->set('client_id', $client_id);
$this->set('doctors', $this->Appointment->Doctor->find('list'));
if (!empty($this->data))
{
if ($this->Appointment->save($this->data))
{
$this->Session->setFlash('Your post has been saved.');
$this->redirect(array('admin' => true, 'controller' => 'appointments', 'action' => 'index'));
}
}
}
然而,我的医生名单没有被创建…有人能帮忙吗?由于
EDIT:还注意到每次我提交表单时,它都会用ID为1覆盖相同的约会。所以它不会创建一个新的约会…什么好主意吗?
没有显示您的客户端名称,因为您没有在控制器中设置客户端数据。
$this->set('client', $this->Appointment->Client->find('first', array('conditions' => array('Client.id' => $client_id))));
不确定这是否会解决缺少医生列表的问题,但是您在create方法
中缺少模型名称$this->Form->create('Appointment', ...);