Репост моей заметки из wiki: http://www.yiiframework.com/wiki/233/using-cache-in-cactivedataprovider/.
Первый параметр в конструкторе CActiveDataProvider может быть строковым значением с названием модели или экземпляр класса модели.
Поэтому можно использовать CActiveRecord::cache() для кэширования, но нужно установить значение 3 у третьего параметра, потому что мы должны закэшировать 2 запроса: получение количества записей и само получение записей.
Не забудьте использовать зависимости для принудительного протухания кэша.
{% raw %}
$dependecy = new CDbCacheDependency('SELECT MAX(update_time) FROM {{post}}')
CActiveDataProvider(Post::model()->cache($duration, $dependecy, 2), array (
'criteria' => array (
'condition' => 'status = 1',
'order' => 'DESC create_time',
)
'pagination' => array (
'pageSize' => 20,
)
));
{% endraw %}