Поиск Omega позволяет легко добавить интеллектуальную поисковую систему на ваш веб -сайт Laravel Powered или веб -приложение. Он может быть настроен для поиска любой из ваших красноречивых моделей.
Под капотом он использует пакет поиска Omega.
Вы можете установить этот пакет с композитором.
composer require divineomega/laravel-omega-search
Чтобы использовать поиск Laravel Omega, сначала добавьте OmegaSearchTrait к моделям, которые вы хотите найти. Затем вы должны реализовать следующие два абстрактных метода.
getOmegaSearchFieldsToSearch() - должен вернуть массив полей модели для поиска.getOmegaSearchConditions() - должен вернуть ассоциативный массив условий поиска. Пример: ['active' => 1, 'discontinued' => 0] После этой настройки можно выполнить поиск, вызывая метод статического omegaSearch($searchText) на модели. Этот метод выполняет интеллектуальный нечеткий поиск и возвращает строитель запросов, отфильтрованную в соответствующие записи в порядке убывания.
Связанные модели могут затем быть извлечены ( ->get() ) или на пчел ( ->paginate() ) по мере необходимости.
Если вы хотите найти содержание связанных таблиц, вы можете использовать соединения. Просто переопределите getOmegaSearchTablesToJoin на вашей модели и верните массив OmegaSearchJoins .
Есть два способа определения соединений. Первый способ - позвонить в метод OmegaSearchJoin::joinTableByForeignKey Вы должны передать имя локальной таблицы и соединить имя таблицы с этим методом.
По умолчанию ключ в таблице соединений будет подключенным именем таблицы, единственным с добавлением _id , а ключ в локальной таблице будет id . Они могут быть установлены вручную, используя 3 -й и 4 -й параметр для этого метода.
Смотрите ниже пример:
public function getOmegaSearchTablesToJoin ()
{
return [
OmegaSearchJoin :: joinTableByForeignKey ( $ this -> getTable (), ' divisions ' ),
];
}или
public function getOmegaSearchTablesToJoin()
{
return [
OmegaSearchJoin ::joinTableByForeignKey( $ this -> getTable (), ' divisions ' , ' id ' , ' division_id),
];
}
Вы можете цепные соединения, как показано ниже:
public function getOmegaSearchTablesToJoin ()
{
return [
OmegaSearchJoin :: joinTableByForeignKey ( $ this -> getTable (), ' divisions ' ),
OmegaSearchJoin :: joinTableByForeignKey ( ' divisions ' , ' companies ' , ' id ' , ' company_id ' )
];
} Если вы хотите присоединиться к таблицам, которые не только связаны с соответствующими ключами, вы можете вручную добавить условия в соединение. Для этого создайте новый объект OmegaSearchJoin и вызовите метод addCondition , чтобы добавить ваши условия. Вы должны указать имя локальной таблицы и имя таблицы соединенного в конструкторе. При желании вы можете указать тип соединения, по умолчанию JOIN
При добавлении условия параметр слева автоматически будет автоматически подготовить имя локальной таблицы, а имя соединенного таблицы будет приготовлено в правильное условие.
Смотрите ниже пример:
public function getOmegaSearchTablesToJoin ()
{
$ join = new OmegaSearchJoin ( ' contacts ' , ' divisions ' , ' INNER JOIN ' );
$ join -> addCondition ( ' gross_income ' , ' > ' , ' annual_income ' );
return [
$ join ,
];
}