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

Entradas populares de este blog

Filtrando por fecha

10 videojuegos gratis para aprender JavaScript en línea

reloj obs---datetime.lua