Empecemos con el motivo, sigamos con el tutorial, y mostremos el resultado como en todo tutorial para agregar Algolia a un proyecto de Laravel 7 o Laravel 8. Me paso varias veces de buscar información sobre algún framework, como en el caso de TailwindCSS, y encontrarme que todos estos tienen un plugin externo (o no) para buscar entre sus datos. Este elegante y popular buscador se llama Algolia. Antes de comenzar, recomiendo que tengan instalado Composer y un Proyecto ya iniciado en Laravel.
Lo primero que debemos hacer es registrarnos en Algolia para que nos den nuestras API Keys.
Una vez que estamos listos para implementar Algolia en Laravel 7 o Laravel 8, vamos a pasar a explicar en pocas palabras cual va a ser el método de implementación de este plugin.
El primer package que vamos a instalar en nuestro proyecto es Laravel Scout. Un potente controlador de búsqueda de texto para nuestros modelos Eloquent. Nos paramos en la raiz del proyecto y ejecutamos el siguiente código con la consola.
composer require laravel/scout
Para concluir con esta instalacion del paquete vamos a publicar el archivo de configuración de scout en nuestro proyecto
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
Ahora si, ya tenemos instalado Laravel Scout en nuestro proyecto. Abrimos el archivo config/scout.php y opcionalmente, buscamos la variable queu y la setteamos en True. Al final de este archivo esta la configuracion principal en donde pondremos la Application ID y Admin API Key que nos dan luego de registrarnos en Algolia.
Una vez finalizada la instalación de Laravel Scout vamos a instalar el paquete de Algolia:
composer require algolia/algoliasearch-client-php
Listo, ya tenemos instalado Algolia en nuestro proyecto de Laravel 7 o 8. Ahora nos queda configurar los Modelos que queremos que aparezcan en nuestras búsquedas. En este caso quiero que mis categorias se muestren en el buscador, este es mi modelo:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable; //Agregamos esta linea
class Categorias extends Model
{
use Searchable; //Agregamos esta linea
protected $fillable = [
"nombre", "banner", "descripcion", "slug",
];
public function subcategorias()
{
return $this->hasMany('App\Models\SubCategorias');
}
//Agregamos la funcion toSearchableArray()
public function toSearchableArray()
{
return [
'nombre' => $this->nombre,
'descripcion' => $this->descripcion,
'slug' => $this->slug,
];
}
}
Con use Laravel\Scout\Searchable; y use Searchable; le estamos diciendo a Scout que el modelo es indexable en nuestras búsquedas. Si necesitamos filtrar los resultados, por ejemplo que solamente busque por nombre descripcion y url; creamos la función toSearchableArray() que devuelve un Array con las propiedades a indexar.
En caso de que ya tengamos datos guardados en nuestra base de datos. Como por ejemplo en mis Categorias que ya las tenia definidas. Vamos a decirle a Scout que importe los datos a Algolia. Para ello, ejecutamos el siguiente comando:
php artisan scout:import "App\Models\Categorias"
Ahora si, ya tenemos nuestros resultados sincronizados con Algolia. En el caso de tener mas modelos, hacer el mismo procedimiento con cada uno de ellos.
En el caso que quisiéramos borrar de Algolia todos los resultados subidos, ejecutamos el siguiente comando:
php artisan scout:flush "App\Models\Categorias"
Para mostrar nuestros resultados en nuestra búsqueda debemos llamar a la función estática search en el controlador que va a mostrar la vista de búsqueda. En nuestra vista blade, podremos realizar un bucle recorriendo todos los resultados.
public function search(Request $request)
{
$busqueda = $request->input("s");
$resultados = Categorias::search($busqueda)->get();
return view('home.search', [
"busqueda" => $busqueda,
"resultados" => $resultados
]);
}
<section class="container mx-auto p-4 m-4">
<h1 class="font-semibold text-2xl text-gray-800">Resultados para "{{$busqueda}}":</h1>
@if (count($resultados) > 0)
@foreach ($resultados as $resultado)
<li>{{$resultado->nombre}}</li>
@endforeach
@else
No se encontraron resultados
@endif
</section>
De esta manera, ya tenemos integrado nuestras busquedas en laravel con Algolia. Este tutorial sirve tanto para Laravel 7 como Laravel 8.-