A Omega Search permite que você adicione facilmente um mecanismo de pesquisa inteligente ao seu site ou aplicativo da Web com alimentação de Laravel. Pode ser configurado para pesquisar em qualquer um dos seus modelos eloquentes.
Sob o capô, isso usa o pacote de pesquisa Omega.
Você pode instalar este pacote com o Composer.
composer require divineomega/laravel-omega-search
Para usar o Laravel Omega Search, primeiro adicione o OmegaSearchTrait aos modelos que você deseja pesquisar. Você deve implementar os dois métodos abstratos a seguir.
getOmegaSearchFieldsToSearch() - deve retornar uma matriz dos campos do modelo para pesquisar.getOmegaSearchConditions() - deve retornar uma matriz associativa das condições de pesquisa. Exemplo: ['active' => 1, 'discontinued' => 0] Após essa configuração, uma pesquisa pode ser executada chamando o método estático omegaSearch($searchText) no modelo. Este método executa uma pesquisa difusa inteligente e retorna um construtor de consultas filtrado para os registros relacionados em ordem decrescente de relevância.
Os modelos relacionados podem ser recuperados ( ->get() ) ou paginados ( ->paginate() ) conforme necessário.
Se você deseja pesquisar o conteúdo de tabelas relacionadas, pode usar as junções. Basta substituir o getOmegaSearchTablesToJoin em seu modelo e retornar uma variedade de OmegaSearchJoins .
Existem duas maneiras de definir junções. A primeira maneira é chamar o método OmegaSearchJoin::joinTableByForeignKey . Você precisa passar o nome da tabela local e ingressou no nome da tabela para este método.
Por padrão, a chave na tabela unida será o nome da tabela unido singularizado com _id anexado e a chave na tabela local id . Estes podem ser definidos manualmente usando o 3º e 4º parâmetro para este método.
Veja abaixo um exemplo:
public function getOmegaSearchTablesToJoin ()
{
return [
OmegaSearchJoin :: joinTableByForeignKey ( $ this -> getTable (), ' divisions ' ),
];
}ou
public function getOmegaSearchTablesToJoin()
{
return [
OmegaSearchJoin ::joinTableByForeignKey( $ this -> getTable (), ' divisions ' , ' id ' , ' division_id),
];
}
Você pode encadear junções como visto abaixo:
public function getOmegaSearchTablesToJoin ()
{
return [
OmegaSearchJoin :: joinTableByForeignKey ( $ this -> getTable (), ' divisions ' ),
OmegaSearchJoin :: joinTableByForeignKey ( ' divisions ' , ' companies ' , ' id ' , ' company_id ' )
];
} Se você deseja ingressar nas tabelas que não estão apenas vinculadas por chaves relacionadas, você pode adicionar manualmente condições a uma junção. Para fazer isso, crie um novo objeto OmegaSearchJoin e chame o método addCondition para adicionar suas condições. Você deve especificar o nome da tabela local e o nome da tabela unida no construtor. Opcionalmente, você pode especificar o tipo de junção, o padrão está JOIN
Ao adicionar uma condição, o parâmetro à esquerda terá automaticamente o nome da tabela local preso e o nome da tabela unido será precendido à condição correta.
Veja abaixo um exemplo:
public function getOmegaSearchTablesToJoin ()
{
$ join = new OmegaSearchJoin ( ' contacts ' , ' divisions ' , ' INNER JOIN ' );
$ join -> addCondition ( ' gross_income ' , ' > ' , ' annual_income ' );
return [
$ join ,
];
}