Доброе утро.
Покажите, именно, как Вы фильтруете в поисковой модели.
Если настроить нужно по разным моделям фильтрацию, то Вам надо ещё создать псевдонимы таблиц.
Покажу на своём примере.
Мне требовалось в маршрутах сделать поиск по городам.
В модели "маршруты" создал публичное свойство "$city_id;". Так же есть связующая таблица, где маршруты связаны с городами. В самом запросе добавил связь и joinWith().
$query = Routes::find()
->from(['r' => Routes::tableName()])
->with(['city', 'routesCities', 'price'])
->joinWith([
'city' => function(ActiveQuery $query){
$query->from(['rc1' => Cities::tableName()]);
}
])
->joinWith([
'routesCities' => function(ActiveQuery $query){
$query->from(['rc2' => RoutesCities::tableName()]);
}
])
В этом запросе я делаю псевдоним для таблицы маршрутов, для таблицы city и связующей таблицы.
Соответственно получаю три псевдонима "r" - маршруты, "rc1" - города, "rc2" - связующая таблица, хранится привязка города к маршруту.
И тогда в фильтрации пишу следующее:
$query->andFilterWhere([
'r.id' => $this->id,
/*****/
'rc1.id' => $this->city_id, // фильтрую по id города.
]);
И в GridView делаю саму колонку фильтра, вывожу через запятую города, через которые проходит маршрут.
[
'attribute' => 'city_id',
'label' => "Города",
'filter' => Cities::find()->select(['title', 'id'])->indexBy('id')->orderBy(['title' => SORT_ASC])->column(),
'value' => function(Routes $routes){
return implode(',', ArrayHelper::map($routes->city, 'id', 'title'));
}
],