Страница 2 из 2

Re: Кеширование CActiveDataProvider - возможно ли?

Добавлено: 2011.02.03, 16:43
zibert02
вобщем то оказалось не кеширующее расширение а другое :)
заработался

Re: Кеширование CActiveDataProvider - возможно ли?

Добавлено: 2011.02.03, 18:06
zibert02
вобщем опять начало глючить
такое ощущение что getData() возращает не все записи а только текущуюь выборку
в результате с кеша берутся потом обрезанные данные
без кеширования все работает ок

Re: Кеширование CActiveDataProvider - возможно ли?

Добавлено: 2011.02.03, 18:36
zibert02
вобщем решил все проще-явно вызываю findAll, кеширую и скармливаю CArrayDataProvider

Re: Кеширование CActiveDataProvider - возможно ли?

Добавлено: 2011.02.08, 15:07
Mitya Gua
1. Наследуемся от класса CActiveDataProvider
2. Добавляем туда свойство типа public $cacheExpire - будем кэшировать данные провайдера только в том случае, если значение задано (т.к. не всегда нам нужно кэширование)
3. Переопределяем методы fetchData() и calculateTotalItemCount() так, чтобы они использовали кэш. Для формирования ключа используем название модели и засериализованную критерию.

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

Re: Кеширование CActiveDataProvider - возможно ли?

Добавлено: 2011.11.24, 15:15
Xpbl4
И все таки есть способ кешировать запросы в CActiveDataProvider?
Или придется писать расширение классов?
Такой способ не работает.

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

    $dataModel = new News();
    $dataModel->published();
    $dataModel->cache(300);
    $dataProvider = new CActiveDataProvider($dataModel, $this->pagination);
 
Впрочем решил пока таким способом.
$dataModel->cache(300, null, 2);

Re: Кеширование CActiveDataProvider - возможно ли?

Добавлено: 2011.11.26, 21:40
Stamm
Да, именно так и решается =)