sql >> Base de Datos >  >> RDS >> Mysql

Yii2:campos de autocompletar basados ​​en otro campo de la tabla relacionada

Todo lo que necesitas es llamar a un AJAX solicitud para obtener los campos necesarios. Solo actúa como se muestra a continuación:

  1. (No sé el nombre de su modelo) eche un vistazo a su formulario y vea cuál es el id de su patient_name campo. Por lo general, es modelname-fieldname . Supongo que el nombre de su modelo es Patient . Entonces, la identificación de patient_name sería patient-patient_name .

  2. Agregue una solicitud ajax (en su opinión).

El código para llamar a AJAX podría tener el siguiente aspecto:

$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:

  • Cambiar el Nombre del controlador en el código anterior con el suyo propio.
  • Supuse que la identificación de city y state campos tiene las siguientes identificaciones:patient-city y state-city relativamente.
  • paciente es una acción en su controlador
  • Es posible que deba eliminar alertas|registros y personalizar un poco el código anterior
  • No consideré ninguna condición para la limpieza del código. Asegúrese de que los datos del usuario sean correctos.

    1. Finalmente, agregue el código de acción en su controlador.

Código de acción:

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