Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Yii2:preenchimento automático de campos com base em outro campo da tabela relacionada


Tudo que você precisa é chamar um AJAX pedido para obter os campos necessários. Basta agir como abaixo:

  1. (não sei o nome do seu modelo) dê uma olhada no seu formulário e veja qual é o id do seu patient_name campo. Geralmente é modelname-fieldname . Presumo que o nome do seu modelo seja Patient . Portanto, o id de patient_name seria patient-patient_name .

  2. Adicione uma solicitação ajax (na sua opinião).

O código para chamar o AJAX pode ser parecido com o abaixo:
$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');
        }
    });
});"); 

Notas:
  • Alterar o ControllerName no código acima com o seu próprio.
  • Presumi que o id de city e state campos tem o(s) seguinte(s) ID(s):patient-city e state-city relativamente.
  • paciente é uma ação em seu controlador
  • Talvez seja necessário remover alertas|logs e fazer alguma personalização no código acima

  • Não considerei nenhuma condição para limpeza de código. Verifique se os dados do usuário estão corretos.
    1. Por fim, adicione o código de ação ao seu controlador.

Código da ação:
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
    ]);
}