Yii: используем кэш в CActiveDataProvider

Репост моей заметки из 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 %}