我正在开发一个个人项目,这是一个允许用户记录药物使用情况的网站。这样做的目的是让用户能够在他们最后一次摄取X时快速参考,以及其他类似的统计数据。
用户还可以存储剂量和测量剂量的单位。这就是问题所在。在我的数据库中,我将每个度量单位与转换值相关联。计划是具有这个转换值,以便在创建诸如图形之类的东西时,存储的每个剂量都易于模塑和使用。
例如,克的转化值为1,而mg的转化值为.001。
这意味着如果用户输入1克X,则此数据通过我的表单提交功能,通过转换值(1)多次1克并将最终产品(1)存储在数据库中。 / p>
类似地,如果用户输入他需要300毫克的X,则300乘以.001得到0.3。
拥有这样的系统可以让我轻松添加两个值,并获得“1.3克的X”
我对这些复杂的东西没有经验,当我把它编码到网站时,这是一个临时修复,这是非常草率的。现在我知道我需要找到一种更好的方法来存储它。
下面我将添加呈现表单的代码以及处理表单的代码。
形式:
<?php
echo $this->Form->input('Record.dose_date', array('placeholder' => 'Date of Dose', 'label' => false,'type' => 'text','id' =>'datepicker'));
echo $this->Form->input('RecordDrugUnit.drug_id', array('placeholder' => 'Substance', 'options'=>$drugList,'label' => false,'type' => 'select'));
echo $this->Form->input('RecordDrugUnit.dose', array('placeholder' => 'Dose', 'label' => false, 'class' => 'colLarge left'));
echo $this->Form->input('RecordDrugUnit.unit_id', array('placeholder'=>'Unit', 'options'=>$unitList, 'label' => false,'type'=>'select', 'class' => 'colSmall right'));
echo $this->Form->submit('SUBMIT', array('class' => 'button'));
echo $this->Form->input('RecordDrugUnit.route_id', array('placeholder'=>'Unit', 'options'=>$routeList, 'label' => false,'type'=>'select', 'class' => 'colLarge right'));
echo $this->Form->input('Record.title', array('placeholder' => 'Title', 'label' => false,'type' => 'text'));
echo $this->Form->input('Record.report', array('placeholder' => 'Your Report','label' => false,'type' => 'textarea'));
?>
控制器:
if ($this->request->is('post')) {
$this->Record->create();
$conv_val = $this->Unit->find('first', array(
'conditions' => array(
'id' => $this->request->data['RecordDrugUnit']['unit_id']),
'fields' => array('conversion')
));
$this->request->data['RecordDrugUnit']['dose'] = (float)$this->request->data['RecordDrugUnit']['dose'] * (float)$conv_val['Unit']['conversion'];
$this->request->data['Record']['user_id'] = $this->Auth->user('id');
if ($this->RecordDrugUnit->saveAssociated($this->request->data, array('deep' => TRUE))) {
$this->Session->setFlash('Your post has been saved.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to add your post.');
}
}
寻找有关如何简化此
的建议答案 0 :(得分:0)
我认为将转换存储在表格中是不必要的,因为单位不会发生变化。你可以让你的表单有一个“单位”下拉代码,使用硬编码选项array('1' => 'grams', '.001' => 'milligrams', etc.,)
,然后剂量将等于(float)$this->request->data['RecordDrugUnit']['dose'] * (float)$this->request->data['RecordDrugUnit']['unit'];