Как реализовать поиск по разделам сайта на yii2?

Я прошу за ранее... не бросаться помидорами в коментах(
Хочу сделать поиск на сайте, вкусить так сказать как это делается. На сайте имеется 10 разделов, хочу сделать поиск по всем не посредственно. Но на данный момент код прописан так что оно ищет только в одной категории, а в других не ищет
Вот код,
class SearchController extends Controller {
    
    public function actionSearch() {
        $q = Yii::$app->request->get('q');
        $query = Extrime::find()->where(['like', 'title', $q]);
        $countQuery = clone $query;
        $pages = new Pagination(['totalCount' => $countQuery->count(), 'pageSize' => 2]);
        $models = $query->offset($pages->offset)
            ->limit($pages->limit)
            ->all();
        return $this->render('search',compact('post','models','q','cat','friend'));
        
    }
    
}


Как мне преобразить, точнее как мне добавить еще условия для поиска? Если добавлять щас как есть, то оно будет перезаписывать переменную. Как мне добавить еще условий для поиска по остальным разделам?
  • Вопрос задан
  • 564 просмотра
Решения вопроса 1
@matperez
Вам нужно какое-то отдельное хранилище (таблица в БД), в котором будут лежать такие данные:
1. тип сущности (по сути имя соответствующей таблицы или модели)
2. id сущности
3. текст по которому будет выполняться поиск

Поля тип и id сущности нужны чтобы связать найденные элементы с реальными страницами вашего сайта.

В качестве такого места для поиска может выступать как отдельная табличка в БД, так и отдельная база данных типа Elasticsearch.

Вам нужно будет 1 раз наполнить эту таблицу разово и потом обновлять ее каждый раз, при изменении данных по которым нужно выполнять поиск.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
не стоит городит велосипед и делать поиск средствами БД проетка (насколько я понимаю она у Вас реляционная). Возьмите лучше готовое решение например Sphinx или ElasticSearch
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы