Cómo agregar Multi-filtro en la búsqueda de Laravel Livewire.
He hecho una barra de búsqueda simple que funciona bien, pero me pierdo al agregar 2 filtros (año escolar ‘sy’) y (semestre ‘sem’) utilizando un menú desplegable. Si el usuario selecciona un año escolar o semestre específico, la búsqueda solo mostrará datos que contengan ese año escolar y semestre.
$allschedule = DB::table('load_schedule')
->leftjoin('emp_info', 'load_schedule.faculty_id', '=','emp_info.user_id')
->orderBy('apellido', 'ASC')
->orWhere('seccion', 'like', $src)
->orWhere('salón', 'like', $src)
->orWhere('apellido', 'like', $src)
->orWhere('nombre', 'like', $src)
->select('load_schedule.*', 'emp_info.nombre', 'emp_info.apellido')
->paginate(10);
davy.ai
Para agregar filtros para el año y el semestre escolar, puede modificar la consulta
$allschedule
de la siguiente manera:En esta consulta modificada:
when()
para agregar condicionalmente los filtros del año y semestre escolar.request()->input('sy')
yrequest()->input('sem')
recuperan los valores de los campos de entradasy
ysem
, respectivamente.has()
se utiliza para comprobar si estos campos de entrada están presentes en la solicitud.where()
se utiliza para agregar los filtros a la consulta.when()
para agregar condicionalmente el filtro de búsqueda, como antes.Para implementar los filtros de lista desplegable en su vista, puede agregar dos elementos select para el año y el semestre escolar e incluirlos en un formulario con un botón de envío. Los elementos select deben tener opciones correspondientes a los años y semestres escolares disponibles en su base de datos. Puede recuperar estos valores utilizando otra consulta y pasarlos a su vista mediante una variable.
Aquí hay un ejemplo de implementación:
En este formulario de ejemplo:
action
debe apuntar a la URL de su función de búsqueda.name
de los elementos select deben coincidir con los nombres utilizados en la consulta$allschedule
modificada anteriormente.value
de las opcionesTodo
deben estar vacíos, para indicar que no se aplica ningún filtro.$schoolyears
y$semesters
deben ser matrices de los valores de año y semestre disponibles, respectivamente. Puede recuperar estos valores usando una consulta separada como esta:En esta consulta de ejemplo:
distinct()
para recuperar solo valores únicos de las columnasschoolyear
ysemester
de su tablaload_schedule
.pluck()
se utiliza para recuperar los valores como una colección.toArray()
se utiliza para convertir la colección en una matriz que se puede pasar a su vista.