Фильтрация сразу нескольких полей в GridView
Фильтрация сразу нескольких полей в GridView
Есть табличка с данными
вывожу через гридВью
сделал фильтр по полям, но в модель передаётся значение только из одного параметра, а остальные сбрасываются. Фильтры сделал выпадающим списком через АррейМап. Т.е. при выборе нового селекта сразу идёт сабмит.
Что делать, куда копать? Получается что только один фильтр срабатывает на одно поле.
вывожу через гридВью
сделал фильтр по полям, но в модель передаётся значение только из одного параметра, а остальные сбрасываются. Фильтры сделал выпадающим списком через АррейМап. Т.е. при выборе нового селекта сразу идёт сабмит.
Что делать, куда копать? Получается что только один фильтр срабатывает на одно поле.
Re: Фильтрация сразу нескольких полей в GridView
скорей всего не правильно настроен search, попробуйте использовать gii
Re: Фильтрация сразу нескольких полей в GridView
фильтМодель был неверно настроен, разобрался, спс
Re: Фильтрация сразу нескольких полей в GridView
тогда вопрос, как сделать так чтоб при выборе одного фильтра после перезагрузки страницы в других фильтрах отображались данные относящиеся только к этому выбраному полю?
Re: Фильтрация сразу нескольких полей в GridView
там у вас данные из главной моделе не переходят в модель поиска
я ж говорю, создайте разочек через gii crud, это быстрый способ разобраться как это все работает
я ж говорю, создайте разочек через gii crud, это быстрый способ разобраться как это все работает
Re: Фильтрация сразу нескольких полей в GridView
что мне именно нужно создать через gii crud?
Re: Фильтрация сразу нескольких полей в GridView
да хоть тот же grid, что сейчас делаете
Re: Фильтрация сразу нескольких полей в GridView
я не понимаю что вы имеете ввиду, объясните пожалуйста как создать grid, т.к. мне это не очевидно...
Re: Фильтрация сразу нескольких полей в GridView
CRUD Generator создат для вас готовый контроллер, вьюхи и модель для поиска, что-то вроде этого:
контроллер:
часть вьюхи index.php:
модель:
контроллер:
Код: Выделить всё
class UserController extends Controller
....
/**
* Lists all User models.
* @return mixed
*/
public function actionIndex()
{
$searchModel = new UserSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$statusArray = User::getStatusArray();
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'statusArray' => $statusArray,
]);
}
....
Код: Выделить всё
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'layout' => "{items}\n{summary}\n{pager}",
'columns' => [
'id',
'username',
'email:email',
[
'attribute' => 'status',
'format' => 'html',
'value' => function ($model) {
if ($model->status === $model::STATUS_ACTIVE) {
$class = 'label-success';
} elseif ($model->status === $model::STATUS_INACTIVE) {
$class = 'label-warning';
} else {
$class = 'label-danger';
}
return '<span class="label ' . $class . '">' . $model->statusName . '</span>';
},
'filter' => Html::activeDropDownList(
$searchModel,
'status',
$statusArray,
['class' => 'form-control', 'prompt' => 'Выбрать...']
)
],
[
'attribute' => 'created_at',
'format' => ['date', 'dd.MM.yyyy'],
'filter' => DatePicker::widget(
[
'model' => $searchModel,
'attribute' => 'created_at',
'dateFormat' => 'dd.MM.yyyy',
'language' => 'ru',
'options' => [
'class' => 'form-control'
],
]
)
],
[
'attribute' => 'updated_at',
'format' => ['date', 'dd.MM.yyyy'],
'filter' => DatePicker::widget(
[
'model' => $searchModel,
'attribute' => 'updated_at',
'dateFormat' => 'dd.MM.yyyy',
'language' => 'ru',
'options' => [
'class' => 'form-control'
],
]
)
],
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
Код: Выделить всё
class UserSearch extends User
{
/**
* @inheritdoc
*/
public function rules()
{
return [
// String
[['username', 'email'], 'string'],
// Status
['status', 'in', 'range' => array_keys(self::getStatusArray())],
// Date
[['created_at', 'updated_at'], 'date', 'format' => 'dd.MM.yyyy']
];
}
/**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
/**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return ActiveDataProvider
*/
public function search($params)
{
$query = User::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
$query->andFilterWhere([
'id' => $this->id,
'status' => $this->status,
'FROM_UNIXTIME(created_at, "%d.%m.%Y")' => $this->created_at,
'FROM_UNIXTIME(updated_at, "%d.%m.%Y")' => $this->updated_at
]);
$query->andFilterWhere(['like', 'username', $this->username])
->andFilterWhere(['like', 'email', $this->email]);
return $dataProvider;
}
}