Omega Search le permite agregar fácilmente un motor de búsqueda inteligente a su sitio web o aplicación web con alimentación de Laravel. Se puede configurar para buscar cualquiera de sus modelos elocuentes.
Debajo del capó, esto usa el paquete de búsqueda Omega.
Puede instalar este paquete con el compositor.
composer require divineomega/laravel-omega-search
Para usar la búsqueda de Laravel Omega, primero agregue el OmegaSearchTrait a los modelos que desea buscar. Luego debe implementar los siguientes dos métodos abstractos.
getOmegaSearchFieldsToSearch() : debe devolver una matriz de los campos del modelo a la búsqueda.getOmegaSearchConditions() - debe devolver una matriz asociativa de las condiciones de búsqueda. Ejemplo: ['active' => 1, 'discontinued' => 0] Después de esta configuración, se puede realizar una búsqueda llamando al método Static omegaSearch($searchText) en el modelo. Este método realiza una búsqueda difusa inteligente y devuelve un constructor de consultas filtrado a los registros relacionados en orden descendente de relevancia.
Los modelos relacionados se pueden recuperar ( ->get() ) o paginados ( ->paginate() ) según sea necesario.
Si desea buscar el contenido de las tablas relacionadas, puede usar JOWS. Simplemente anule el getOmegaSearchTablesToJoin en su modelo y devuelva una variedad de OmegaSearchJoins .
Hay dos formas de definir las uniones. La primera forma es llamar al método OmegaSearchJoin::joinTableByForeignKey . Debe pasar el nombre de la tabla local y el nombre de la tabla unido a este método.
De manera predeterminada, la clave en la tabla unida será el nombre de la tabla unido singularizado con _id agregado y la clave en la tabla local id . Estos se pueden establecer manualmente utilizando el tercer y cuarto parámetro para este método.
Vea a continuación para un ejemplo:
public function getOmegaSearchTablesToJoin ()
{
return [
OmegaSearchJoin :: joinTableByForeignKey ( $ this -> getTable (), ' divisions ' ),
];
}o
public function getOmegaSearchTablesToJoin()
{
return [
OmegaSearchJoin ::joinTableByForeignKey( $ this -> getTable (), ' divisions ' , ' id ' , ' division_id),
];
}
Puedes encadenar uniones como se ve a continuación:
public function getOmegaSearchTablesToJoin ()
{
return [
OmegaSearchJoin :: joinTableByForeignKey ( $ this -> getTable (), ' divisions ' ),
OmegaSearchJoin :: joinTableByForeignKey ( ' divisions ' , ' companies ' , ' id ' , ' company_id ' )
];
} Si desea unir tablas que no solo están vinculadas por claves relacionadas, puede agregar manualmente condiciones a una unión. Para hacer esto, cree un nuevo objeto OmegaSearchJoin y llame al método addCondition para agregar sus condiciones. Debe especificar el nombre de la tabla local y el nombre de la tabla unido en el constructor. Opcionalmente, puede especificar el tipo de unión, el valor predeterminado es JOIN
Al agregar una condición, el parámetro a la izquierda tendrá automáticamente el nombre de la tabla local y el nombre de la tabla unido se preparará a la condición correcta.
Vea a continuación para un ejemplo:
public function getOmegaSearchTablesToJoin ()
{
$ join = new OmegaSearchJoin ( ' contacts ' , ' divisions ' , ' INNER JOIN ' );
$ join -> addCondition ( ' gross_income ' , ' > ' , ' annual_income ' );
return [
$ join ,
];
}