yii2:在多种条件下自动填充

时间:2014-12-14 13:25:25

标签: php mysql yii2

我的模型/表格如下:

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的条件? 提前感谢您的宝贵帮助。

1 个答案:

答案 0 :(得分:1)

没有任何关系或加入或子查询,

daily_ward_entry.room_name毫无意义。实际上,查询不知道daily_ward_entry

建议:

1-创建关系并使用withJoin With

2-在Join

上创建daily_ward_entry ipd_chargesroom_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}}

就足够了。