filtros de búsqueda
Hola y bienvenido. En este artículo vamos a tratar varias formas de realizar filtros de búsqueda. Lo primero es agregar a nuestra vista index.blade.php lo siguiente:
|
<nav class="navbar
navbar-light float-right"> <form class="form-inline"> <input name="buscarpor" class="form-control mr-sm-2"
type="search" placeholder="Buscar por nombre"
aria-label="Search"> <button class="btn
btn-outline-success my-2 my-sm-0" type="submit">Buscar</button> </form> </nav>
|
|
y en el controlador
AgendaController modificamos la funcion index y debe quedar de esta manera: |
|
public function index(Request $request) { //obteniendo
datos $nombre = $request->get('buscarpor');
//Realizando la operación de filtrado $Agenda
= Agenda::where('nombres','like',"%$nombre%")->paginate(5);
//Devolvemos las variable agenda para ser representada en la vista return view('agenda.index', compact('Agenda')); } |
Pero que
pasa, si nuestro cliente, nos dice: ahora quiero otro campo para poder buscar. Quiero
un campo nombre y otro apellido para buscar.
De esta
manera la cosa se complica, y gracias a Dios, Laravel tiene unas funciones
llamada Scope que nos ayudan bastante con este tema de filtros.
Ya en
nuestro caso, tendremos que modificar la vista index de esta manera:
|
<nav
class="navbar navbar-light float-right"> <form class="form-inline"> <input name="buscarpor" class="form-control mr-sm-2" > <input name="buscarporapellido" class="form-control mr-sm-2" > <button class="btn
btn-outline-success my-2 my-sm-0"
type="submit">Buscar</button> </form> </nav> |
|
Debemos
modificar nuestra función index del controlador. |
|
public
function index(Request $request) { $nombre = $request->get('buscarpor'); $apellido = $request->get('buscarporapellido');
$Agenda = Agenda::nombres($nombre)->apellidos($apellido)->paginate(5); return view('agenda.index',
compact('Agenda')); } |
|
Ahora
debemos ir a nuestro modelo Agenda y agregar lo siguiente: |
|
class
Agenda extends Model { public function scopeNombres($query, $nombres) { if
($nombres) { return
$query->where('nombres','like',"%$nombres%"); } } public function scopeApellidos($query, $apellidos) { if
($apellidos) { return
$query->where('apellidos','like',"%$apellidos%"); } } } |
Otra forma de hacerlo:
|
<nav class="navbar
navbar-light float-right"> <form class="form-inline">
<select name="tipo" class="form-control
mr-sm-2" id="exampleFormControlSelect1"> <option>Buscar por
tipo</option> <option>nombres</option> <option>apellidos</option> <option>telefono</option> <option>celular</option> <option>email</option> </select> <input name="buscarpor"
class="form-control mr-sm-2" type="search" >
<button class="btn btn-outline-success my-2 my-sm-0"
type="submit">Buscar</button> </form> </nav> |
|
Vamos a modificar nuestra
funcion index en nuestro controlador: |
|
public function index(Request
$request) { $buscar =
$request->get('buscarpor'); $tipo = $request->get('tipo'); $Agenda = Agenda::buscarpor($tipo, $buscar)->paginate(5); return view('agenda.index',
compact('Agenda')); } |
|
y en nuestro modelo lo hacemos
de esta manera: |
|
<?php namespace App; use Illuminate\Database\Eloquent\Model; class
Agenda extends Model { public function scopeBuscarpor($query, $tipo, $buscar) { if
( ($tipo) && ($buscar) ) { return
$query->where($tipo,'like',"%$buscar%"); } } } |
Comentarios
Publicar un comentario