Mysql
 sql >> Database >  >> RDS >> Mysql

Yii2:riempimento automatico dei campi in base a un altro campo della tabella correlata

Tutto ciò di cui hai bisogno è chiamare un AJAX richiesta per ottenere i campi necessari. Basta agire come di seguito:

  1. (Non conosco il nome del tuo modello) dai un'occhiata al tuo modulo e guarda qual è l'id del tuo patient_name campo. Di solito è modelname-fieldname . Presumo che il nome del tuo modello sia Patient . Quindi, l'id di patient_name sarebbe patient-patient_name .

  2. Aggiungi una richiesta ajax (nella tua vista).

Il codice per chiamare AJAX potrebbe essere simile al seguente:

$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');
        }
    });
});"); 

Note:

  • Cambia il Nome del controller nel codice sopra con il tuo.
  • Ho assunto che l'id di city e state campi ha i seguenti ID:patient-city e state-city relativamente.
  • paziente è un'azione nel tuo controller
  • Potrebbe essere necessario rimuovere gli avvisi|registri e apportare alcune personalizzazioni al codice sopra
  • Non ho considerato alcuna condizione per la pulizia del codice. Assicurati che i dati utente siano corretti.

    1. Infine, aggiungi il codice azione nel tuo controller.

Codice azione:

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