Сортировка по столбцу с динамически вычисляемыми значениями в CGridView

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
New_Wind
Сообщения: 55
Зарегистрирован: 2015.03.09, 15:15
Контактная информация:

Сортировка по столбцу с динамически вычисляемыми значениями в CGridView

Сообщение New_Wind »

Привет. Есть CGridView, значения одного столбца которого вычисляются динамически.

Ну примерно так:

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

        [
            'header' => 'Время чтения',
            'value' => function($book) use ($dateFrom, $dateTo) {
                return $book->getStatReadTimeByPeriod($dateFrom, $dateTo);
            },
        ],
Значения $dateFrom и $dateTo берутся из дополнительной формы.
В методе getStatReadTimeByPeriod в зависимости от дат формируются данные, которые и проставляются в ячейку столбца.

Хочется уметь сортировать данные и по этому столбцу тоже. Как это можно сделать?
Спасибо.
Аватара пользователя
New_Wind
Сообщения: 55
Зарегистрирован: 2015.03.09, 15:15
Контактная информация:

Re: Сортировка по столбцу с динамически вычисляемыми значениями в CGridView

Сообщение New_Wind »

Насколько я понимаю я не смогу сортировать по значениям, которые вычисляются на уровне представления. Надо вычисления где-то глубже производить.
Но как это сделать?

У меня над таблицей Книг, которая выводится в CGridView есть еще форма для ввода даты начала и конца периода.

Потом от этого периода зависит вычисляемое значение.

Вычисляется примерно так:

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

SELECT SUM(b.`read_time`) as read_time
                    FROM `stat_book` b
                    WHERE b.`book_id` = :book_id AND b.`date` >= :date_start AND b.`date` < :date_finish
                    GROUP BY b.`book_id`
book_id - id книги из таблицы Книг, которую собственно и вывожу в CGridView, а date_start и date_finish - значения из дополнительной формы.

Полученное значение read_time я и вывожу в отдельный столбец, по которому хочу уметь сортировать.
Ответить