Yii2:根据相关表中的另一个字段自动填充字段

时间:2014-11-30 09:58:02

标签: php mysql ajax yii2

我有一个MySQL表和模型patient_entry,其中包含字段patient_namecitystate。我还有另一个表格/模型health_card,其中还包含patient_namecitystate

假设patient_entry表格已填充patient_namecitystate

当我以health_card形式输入数据时,当我选择与patient_name表相关的patient_entry via下拉字段时,我想要相关的city和{ {1}}要自动填充的字段。

state的{​​{1}}看起来像这样:

_form.php

在控制器中,我根据建议添加了:

health_card

1 个答案:

答案 0 :(得分:3)

您只需调用AJAX请求即可获取所需字段。就像下面这样:

  1. (我不知道您的型号名称)查看您的表单,看看id字段的patient_name是什么。通常是modelname-fieldname。我假设您的模型名称为Patient。因此,patient_name的ID为patient-patient_name

  2. 添加ajax请求(在您的视图中)。

  3. 调用AJAX的代码如下所示:

    $this->registerJs("$('#patient-patient_name').on('change',function(){
        $.ajax({
            url: '".yii\helpers\Url::toRoute("controllerName/patient")."',
            dataType: 'json',
            method: 'GET',
            data: {id: $(this).val()},
            success: function (data, textStatus, jqXHR) {
                $('#patient-city').val(data.city);
                $('#patient-state').val(data.state);
            },
            beforeSend: function (xhr) {
                alert('loading!');
            },
            error: function (jqXHR, textStatus, errorThrown) {
                console.log('An error occured!');
                alert('Error in ajax request');
            }
        });
    });"); 
    

    注意:

    • 使用您自己的代码更改上述代码中的 ControllerName
    • 我认为citystate字段的ID具有以下ID:patient-citystate-city相对。
    • 患者是您控件中的操作
    • 您可能需要删除警报日志并对上述代码进行一些自定义
    • 我没有考虑代码清理的任何条件。请确保用户数据正确无误。

      1. 最后,将操作代码添加到控制器中。

    行动代码:

    public function actionPatient($id){
        // you may need to check whether the entered ID is valid or not
        $model=  \app\models\Patient::findOne(['id'=>$id]);
        return \yii\helpers\Json::encode([
            'city'=>$model->city,
            'state'=>$model->state
        ]);
    }