Мне надо организовать поиск по сайту как на картинки, имеется две таблицы "profile и profile_has_category".
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