Как в yii2 сделать дополнительную обработку только видимых данных в ArrayDataProvider?

Добрый день. Я создаю ArrayDataProvider следующим образом:
$dataProvider = new ArrayDataProvider([
    'allModels' => $data,
    'sort' => [
        'attributes' => [
            'quantity',
        ],
        'defaultOrder' => [
            'quantity' => SORT_DESC,
        ]
    ],
    'pagination' => [
        'pageSize' => 10
    ]
]);

Допустим массив $data имеет в себе 1000 элементов. Я хочу сделать достаточно ресурсоемкие дополнительные расчеты, но делать их для всех 1000 элементов очень долго, поэтому я хотел сделать доп. расчеты только для отображаемых на странице элементов, в данном случае для первых 10 элементов.

Для этого я добавил вот такой код:
$allModels = $dataProvider->getModels();

foreach ($allModels as &$model) {
    // Какие-то сложные расчеты с присвоением значения
    $model['value'] = 123;
}

Но когда я передаю $dataProvider в GridView, то внутри элементов, отображаемых на странице, уже нет ключа value, которое я ранее создал. Тоже самое будет, если сразу после обработки вывести $dataProvider->getModels()

Подскажите, как сделать дополнительные расчеты для ArrayDataProvider только для элементов, которые будут выводиться на текущей странице?
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
IvanU7n
@IvanU7n
nothing interesting here
собственно, где вызов setModels(), чтобы обновить данные в объекте?

потуги со ссылками не работают, т.к. getModels() возвращает массив без ссылки
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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