как в gridview yii2 фильтровать только по одному параметру
когда фильтруешь таблицу, построенную на gridview каждый следующий применённый фильтр ищет в пределах уже отобранных результатов и у тебя копится борода в урле типа
FundSearch%5Bid%5D=&FundSearch%5Border_id%5D=&FundSearch%5Buser_id%5D=&FundSearch%5Bdate%5D=&FundSearch%5Bnecessarily%5D=&FundSearch%5Bbank_checks_id%5D
понятно, что это всё можно регулировать через orFilterWhere и andFilterWhere, но вопрос в том, как всегда получать/отправлять один единственный парметр типа ?ProductSearch%5Bcategory_id%5D=795?
Ответы (1 шт):
Не уверен, что правильно понял суть Вашего вопроса. Но в рамках того, что понял - делаете вывод своего фильтра в каждом столбце. В любом из них добавляете hidden поле c именем category_id и значением.
Пример:
$searchModel->category_id = 795;
echo GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
//-- ID
[
'label' => \Yii::t('app', 'Column Id'),
'filter' => Html::button(Html::tag('i', '', ['class' => 'glyphicon glyphicon-remove']), ['name' => 'clear-group_id','class' => 'form-control rbtn']).
Html::activeInput('text',$searchModel,'group_id',[
'class' => 'form-control',
]). Html::activeInput('text',$searchModel,'category_id',[
'class' => 'hide form-control',
]),
,
'headerOptions' => ['class' => 'column-id'],
'attribute' => 'group_id',
'format' => 'html',
'value' => function($model) {
return ( is_array( $model ) && isset( $model['group_id'] ) ? $model['group_id'] : null );
},
'contentOptions' => ['class' => 'text-center'],
],
]
]);
Таким образом при применении фильтра, помимо остальных полей Вам всегда будет передано еще одно поле category_id с его значением.