Yii2 как правильно организовать поиск по сайту?

Мне надо организовать поиск по сайту как на картинки, имеется две таблицы "profile и profile_has_category".

510b3a7a6b.png

1 - Первой таблице храниться виде id, область и город специалиста, во второй храниться список выбранных категорий пользователем, там тоже хранится виде id и еще сделано title, как мне правильно реализовать поиск специалистов. Допустим пользователь выбирает автоуслуги и город Москва, как проверять и сравнивать (если так можно выразиться) и выводить всех спецов по городу Москва.

2 - как сделать правильный запрос по городу и область, пример
я вожу город автокомплит его подхватывает и через запятую подтягивает область

Я взял виджет от картика kartik\typeahead\Typeahead.

Поиск специалистов по категории controller

public function actionCategoryList($q = null)
{
$query = new Query();

$query->select('title')
    ->from('profile_has_category')
    ->where('title LIKE "%' . $q . '%"')
    ->orderBy('title');
$command = $query->createCommand();
$data = $command->queryAll();
$out = [];
foreach ($data as $d) {
    $out[] = ['value' => $d['title']];
}
echo Json::encode($out);
}


view
Typeahead::widget([
                'name' => 'Search[category]',
                'options' => ['placeholder' => 'Искать специальности ...'],
                'pluginOptions' => ['highlight' => true],
                'class' => 'search-input-spec',
                'dataset' => [
                    [
                        'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('value')",
                        'display' => 'value',
                        //'prefetch' => $asset->baseUrl . '/samples/countries.json',
                        'remote' => [
                            'url' => Url::to(['search/category-list']) . '?q=%QUERY',
                            'wildcard' => '%QUERY'
                        ]
                    ]
                ]
            ]);


БД - profile
id        | 1
----------| -
----------| -
----------| -
region_id | 12
city_id   | 465


БД - profile_has_category
id          | 1
category_id | 1070
title       | Электрик
price       | 100
  • Вопрос задан
  • 783 просмотра
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Сделать join. Как-то так:
$result = User::find()
->joinWith('profile_has_category')
->joinWith('profile_has_regioncity')
->andWhere(['profile_has_category.id'=>'category_id'])
->andWhere(['profile_has_regioncity.id'=>'city_id'])
->all();
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы