Pentru un proiect la care lucrez acum am avut nevoie de un plugin de Laravel care sa ma ajute sa caut in anumite campuri din baza de date si sa ordonez dupa relevanta. Am gasit unul dar nu facea exact ce vroiam eu si m-am gandit sa modific si sa fac eu unul pe nevoile mele. Astfel am facut pachetul filipac/searchable.
Pentru instalare, adaugati in composer.json textul urmator dupa care dati composer update
"filipac/searchable": "1.0.*"
Cum se foloseste?
In modelul care vreti sa fie cautabil, adaugati sus de tot linia aceasta: use Filipac\Searchable\SearchableTrait; si apoi folositi trait-ul in clasa: use SearchableTrait;
Va dau un exemplu complet:
use Filipac\Searchable\SearchableTrait; class User extends \Eloquent { use SearchableTrait; /** * Searchable rules. * * @var array */ protected $searchable = [ ['column' => 'first_name', 'relevance' => 10], ['column' => 'last_name', 'relevance' => 10], ['column' => 'bio', 'relevance' => 2], ['column' => 'email', 'relevance' => 5], ]; }
Acum poti cauta in modelul respectiv astfel:
$users = User::search($query)->get(); // Search and get relations $users = User::search($query) ->with('photos') ->get();
Ce se intampla daca vrei sa cauti si in tabelele cu care modelul are relatii (cum a fost si cazul meu)? Pai in cazul acesta mai adauga in model codul urmator:
protected $joinable = [ 'profiles' => ['users.profile_id','profiles.id'] ];
Dupa care poti adauga campurile din tabelul mentionat (profiles) astfel:
protected $searchable = [ ['column' => 'name', 'relevance' => 10], ['column' => 'profiles.name', 'relevance' => 1], ['column' => 'profiles.description', 'relevance' => 2], ];
Mai multe detalii gasiti pe pagina de GitHub – aici. Documentatia este in engleza, though!
Lasă un răspuns