Не понимаю как заставить фильтр отображаться. Прошу помочь с настройкой фильтра по связанным полям.
В SearchModel строится запрос из двух таблиц '
shop_product' (product_id, published и т.д.)- продукты и
'shop_product_value' (product_id, param_id, value)- значения параметров продуктов, которые связаны по
product_id:
$query = (new \yii\db\Query())
->select(['p.product_id', 'Опубликован' => 'p.published', 'Price' => 'p1.value', 'Description' => 'p2.value'])
->from(['p' => 'shop_product'])
->leftJoin('shop_product_value AS p1', 'p.product_id = p1.product_id AND p1.param_id IN (2)')
->leftJoin('shop_product_value AS p2', 'p.product_id = p2.product_id AND p2.param_id IN (5)')
->indexBy('product_id');
далее:
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 10,
],
]);
...
$query->andFilterWhere([
'p.product_id' => $this->product_id, // генерирует поле фильтра
'p.published' => $this->published, //фильтра нет!
'p1.value' => ???????, //фильтра нет!
]);
...
return $dataProvider;
- Как заставить фильтр работать в таком запросе?
- Почему если добавить псевдоним 'Опубликован' => 'p.published', фильтр перестает выводится, но если убрать 'Опубликован' то фильтр появляется?
- Как вывести фильтр для полей из leftJoin???
GridView пока для упрощения вывожу так:
GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
//'columns' => $columns,
]);
Буду благодарен за помощь, перепробовал уже всё что можно :-(...