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

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
zibert02
Сообщения: 203
Зарегистрирован: 2010.11.24, 17:29

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

Сообщение zibert02 »

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

zibert02
Сообщения: 203
Зарегистрирован: 2010.11.24, 17:29

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

Сообщение zibert02 »

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

zibert02
Сообщения: 203
Зарегистрирован: 2010.11.24, 17:29

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

Сообщение zibert02 »

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

Mitya Gua
Сообщения: 1
Зарегистрирован: 2011.02.08, 15:00

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

Сообщение Mitya Gua »

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

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

Xpbl4
Сообщения: 3
Зарегистрирован: 2011.06.23, 15:11

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

Сообщение Xpbl4 »

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

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

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

Аватара пользователя
Stamm
Сообщения: 407
Зарегистрирован: 2010.03.14, 18:59
Откуда: Россия, Москва
Контактная информация:

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

Сообщение Stamm »

Да, именно так и решается =)

Ответить