繁体   English   中英

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

[英]Yii2: auto fill fields based on another field from related table

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

假设patient_entry表已经填充了patient_namecitystate

当我将数据输入health_card形式,当我选择了patient_name通过相关下拉字段patient_entry表,我想相关的citystate领域进行自动填充。

_form.phphealth_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
    ]);
}

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

  1. (我不知道您的型号名称)查看您的表单,看看您的patient_name字段的idpatient_name 它通常是modelname-fieldname 我假设您的型号名称是Patient 因此, patient_name的id将是patient-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
  • 我假设city state字段ID具有以下ID: patient-city state-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
    ]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM