Как создать свой фильтр в Gridview?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
rotting
Сообщения: 74
Зарегистрирован: 2016.07.28, 15:50

Как создать свой фильтр в Gridview?

Сообщение rotting »

Провайдер данных создаю таким образом:

Код: Выделить всё

$myDataProvider1 = new SqlDataProvider([
        'sql' => 'SELECT b2b.user_list.name as list,
b2b.goods.article as article, b2b.goods.name as name, b2b.goods.id as good_id FROM b2b.listgoods, b2b.user_list, b2b.goods where b2b.listgoods.lisy_id=b2b.user_list.id
                  and b2b.listgoods.good_id=b2b.goods.id and user_id=:user_id ORDER BY list ASC',
        'params' => [':user_id' => $user_id],
        'sort' => [
            'attributes' => [
                'good_id',
                'view_count',
                'created_at',
            ],
        ],
        'pagination' => [
            'pageSize' => 100,
        ],
    ]);
Потом вот так вывожу GridView:

Код: Выделить всё

echo GridView::widget([
        'dataProvider' => $myDataProvider1,
Но вот как модель поиска создать чтоб потом добавить возможность фильтра?
Аватара пользователя
Maxim Glushko
Сообщения: 98
Зарегистрирован: 2017.04.24, 19:16
Откуда: Україна, Одеса

Re: Как создать свой фильтр в Gridview?

Сообщение Maxim Glushko »

Дата-провайдер создаётся ИЗ модели поиска.

$dataProvider = $searchModel->search(Yii::$app->request->get());
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Как создать свой фильтр в Gridview?

Сообщение Alexum »

Так же, как и с activeDataProvider. Создаёте search-модель, премещаете туда генерацию sqlDataProvider. Строку с SQL запросом собираете при помощи yii\db\Query.

Код: Выделить всё

$query = new Query;
// Основной запрос
$query->select(....
	 ->from(...
	 ->where(...
	 ->orderBy(...
// Дальше фильтры из вашего gridView
$query->andFilterWhere([... ]);

$dataProvider = new SqlDataProvider([
        'sql' => $query,
        'sort' => [
            'attributes' => [
                'good_id',
                'view_count',
                'created_at',
            ],
        ],
        'pagination' => [
            'pageSize' => 100,
        ],
    ]);
...

return $dataProvider;
rotting
Сообщения: 74
Зарегистрирован: 2016.07.28, 15:50

Re: Как создать свой фильтр в Gridview?

Сообщение rotting »

Я хочу в определении gridview написать так 'filterModel'=>$searchModel, я понимаю что не совсем корректно формулирую вопрос, как мне получить фильтры из шапки грида и передать сюда $query->andFilterWhere([... ]); ?
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Как создать свой фильтр в Gridview?

Сообщение someweb »

Наследуйте от yii\base\Model
Добавте public поля и rules
Посмотрите как в CRUD gii сделано (вам нужны поля, так как не наследуетесь от ActiveRcord)
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Ответить