一尘不染

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

ajax

我有一个MySQL表和模型patient_entry包含的字段patient_namecity以及state。我也有另一个表/模型health_card也包含patient_namecitystate

假设patient_entry已经充满了桌子patient_namecitystate

当我以health_card表格形式输入数据时,当我选择patient_namepatient_entry表格相关的“
通过”下拉字段时,我希望相关citystate字段能够自动填写。

我的_form.phpfor health_card看起来像这样:

    <head>
<script>

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

      </script>
</head>

根据建议,在控制器中添加了以下内容:

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

阅读 312

收藏
2020-07-26

共1个答案

一尘不染

您所需要的只是调用AJAX请求以获取必填字段。就像下面这样:

  1. (我不知道您的型号名称)查看您的表格,看看id您的patient_name字段是什么。通常是这样modelname-fieldname。我认为您的型号名称是Patient。因此,的id patient_namepatient-patient_name

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

调用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
  • 我假设的ID citystate领域具有以下ID(S):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
    ]);
}
2020-07-26