Из массива models в dataProvider

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
iamguruman
Сообщения: 236
Зарегистрирован: 2018.05.10, 08:26

Из массива models в dataProvider

Сообщение iamguruman »

Подскажите, пожалуйста, как список моделей преобразовать обратно в датаПровайдер?

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

public function actionIndex(){
	$searchModel = new MOpDogovorSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $models = $dataProvider->getModels(); // << получаю список моделей из дата провайдера

        /**
         * @var int $key
         * @var MOpDogovor $model
         */
        foreach ($models as $key => $model){

            if(MOpDeposit::find()->andWhere(['dogovor_id' => $model->id])->count() > 0){
                unset($models[$key]); // << удаляю из массива ключи в случае если > 0
            }

        }

        $models = array_values($models); // << обновляю ключи массива
        
        $dataProvider->setModels($models);  // << хочу загрузить обратно в датаПровайдер мой список оставшихся моделей, как?

        $dataProvider->setPagination(['pageSize' => 20]);

        return $this->render('index_without_deposit', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
}
        
        
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Из массива models в dataProvider

Сообщение maleks »

Я бы лучше в search() добавил еще вот эти ваши дополнительные условия, чтобы там оно добавило на запрос ограничений.
А то у вас и с пагинатором возникнут заморочки.

Ну а если по вашему, то setModels() не работает, я так понял?
Возможно нужно еще setKeys() ?
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Из массива models в dataProvider

Сообщение SiZE »

setModels() добавляет модели только для текущей страницы. Пагинация нормально не будет работать в таком случае. Поэтому все данные из БД надо фильтровать на уровне запроса.
Аватара пользователя
aac68@mail.ru
Сообщения: 45
Зарегистрирован: 2013.12.12, 12:51

Re: Из массива models в dataProvider

Сообщение aac68@mail.ru »

никак. Тебе придется использовать ArrayDataProvider в GridVew
Ответить