Задать вопрос

Как в 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 только для элементов, которые будут выводиться на текущей странице?
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
IvanU7n
@IvanU7n
nothing interesting here
собственно, где вызов setModels(), чтобы обновить данные в объекте?

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽