我的模型/表格如下:
table room_category
id room_category
1 Classic
2 Deluxe
table room_charges
id room_category room_name room_charges
1 1 c1 600
2 2 d1 800
table ipd_charges
id doctor room_category charges_cash charges_cashless
1 1 1 200 300
2 1 2 300 400
表patient_detail(patient_admission)
id patient_name tpa_name(if not null, equivalent to charges_cashless)
1 1 Null
2 2 1
表daily_ward_entry
id patient_name room_name(id) doctor_name(id) charges ( from ipd_charges)
1 1 1 1 200
2 2 2 1 400
现在,在daily_ward_entry表中有一个下拉字段供医生使用。当我选择下拉字段时,费用字段需要自动填充。
我使用Jason和ajax使用以下代码实现此目的,而不考虑room_category。但是room_category的收费会有所不同。(这只是在保存记录后才有效,我更喜欢在保存前提取费用。)
这是我在控制器中的代码:
public function actionChargesCash($id){
$model = \app\models\IpdCharges::findOne(['doctor'=>$id]);
return \yii\helpers\Json::encode(['visit_charges'=>$model->charges_cash]);
}
public function actionChargesCashLess($id){
$model= \app\models\IpdCharges::findOne(['doctor'=>$id]);
return \yii\helpers\Json::encode(['visit_charges'=>$model->charges_cashless]);
}
我也试过这个变种:
public function actionChargesCash($id){
$model = \app\models\IpdCharges::find()
->where(['doctor'=>$id])
->andwhere(['room_category'=>'daily_ward_entry.room_name'])->one();
如果我将'daily_ward_entry.room_name'
替换为room_name id(如3或6),我会得到结果,这意味着我没有使用正确的语法来引用当前表中的列。
如何在上面的代码中包含room_name的条件? 提前感谢您的宝贵帮助。
答案 0 :(得分:1)
daily_ward_entry.room_name
毫无意义。实际上,查询不知道daily_ward_entry
。
建议:
1-创建关系并使用with
或Join With
2-在Join
daily_ward_entry
ipd_charges
和room_name=room_category
room_category
的查询
3-使用子查询创建查询,以查找在SELECT room_name FROM daily_ward_entry
中有andWhere()
的所有| IpdCharge
以上所有建议均符合您的要求。
另一个重要说明:
orWhere()
/ where()
将适用于默认条件。Find()
将忽略默认条件我没有看到任何默认条件(覆盖andWhere
),因此,无需使用where(['doctor'=>$id,'room_category'=>3,...])
,只需:
{{1}}
就足够了。