@MaikMain
Начинающий backend - developer

Почему не работает searchModel.Yii2?

Добрый день, если я пишу вот так:
public function actionIndex()
    {
        $searchModel = new OrdersSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $dataProvider = new ActiveDataProvider([
            'query' => Orders::find(),
            'pagination' => [
                'pageSize' => 10,
                'forcePageParam' => false,
                'pageSizeParam' => false
            ],
            'sort' => [
                'defaultOrder' => [
                    'statys' => SORT_ASC
                ]
            ]
        ]);
        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

То работает pagination и sort, но перестает работать фильтрация. Я понимаю, что переопределяю $dataProvider, но как мне сделать чтобы все работало?
  • Вопрос задан
  • 440 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Я понимаю, что переопределяю $dataProvider

Нет Вы его не переопределяете, Вы вместо него в переменную закидываете совершенно другие данные.
Все настройки
'query' => Orders::find(),
            'pagination' => [
                'pageSize' => 10,
                'forcePageParam' => false,
                'pageSizeParam' => false
            ],
            'sort' => [
                'defaultOrder' => [
                    'statys' => SORT_ASC
                ]
            ]

можно сделать в searchModel, зачем Вы городите это в экшене?
но если уж надо, то так:
public function actionIndex()
    {
        $searchModel = new OrdersSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $dataProvider->setSort([
                'defaultOrder' => [
                    'statys' => SORT_ASC
                ]
          ]);
         $dataProvider->setPagination([
                'pageSize' => 10,
                'forcePageParam' => false,
                'pageSizeParam' => false
        ]);
        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

Вот это переопределение, а Вы просто взяли переменную и создали в ней новый экземпляр класса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@tsvetoshenko
Веб-разработчик
вся работа с Data Provider происходит в методе search класса OrdersSearch, нет необходимости переопределять его в контроллере
в каком виде вы производите вывод данные во view? GridView или ListView?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы