Кеширование CActiveDataProvider - возможно ли?
Кеширование CActiveDataProvider - возможно ли?
Собственно сабж. Можно ли кешировать CActiveDataProvider?
Re: Кеширование CActiveDataProvider - возможно ли?
http://www.yiiframework.ru/doc/guide/ru/caching.data ()
А надо ли?
Код: Выделить всё
value=Yii::app()->cache->get($id);
if($value===false)
{
// обновляем $value, т.к. переменная не найдена в кэше,
// и сохраняем в кэш для дальнейшего использования:
// Yii::app()->cache->set($id,$value);
}
Re: Кеширование CActiveDataProvider - возможно ли?
пытаюсь кешировать CActiveDataProvider, причем стандартно Yii::app()->cache->set($id, $dataProvider); так вот при вызове
получаю такую вот ошибку
в чем проблема?
Код: Выделить всё
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_viewGoods',
)); ?>
если убрать кеширование то работаетTrying to get property of non-object
public function getTableSchema()
615 {
616 return $this->getMetaData()->tableSchema;
617 }
в чем проблема?
Re: Кеширование CActiveDataProvider - возможно ли?
что никто не кеширует CActiveDataProvider? или у всех он нормально работает?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Кеширование CActiveDataProvider - возможно ли?
А зачем его кешировать?
Нравится Yii? Давайте сделаем его лучше!.
Re: Кеширование CActiveDataProvider - возможно ли?
По идее должно кешироваться вообще все что угодно, втч CActiveDataProvider.
Дайте побольше кода.
Дайте побольше кода.
Re: Кеширование CActiveDataProvider - возможно ли?
чтобы уменьшить количество запросов к базе. один раз получили записи, засунули в кеш и выводим с кеша
Re: Кеширование CActiveDataProvider - возможно ли?
Nafania писал(а):По идее должно кешироваться вообще все что угодно, втч CActiveDataProvider.
Дайте побольше кода.
код самый обыкновенный. в контроллере
Код: Выделить всё
$dataProvider = new CActiveDataProvider(Goods::model()->notdeleted($id), array(
'pagination'=>array(
'pageSize'=>11
)
));
Yii::app()->cache->set("GoodsList{$id}",
$dataProvider,
$this->module->cacheDuration,
DBDependency::GetTbDependency(Goods::model()->tableName())
);
Код: Выделить всё
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_viewGoods',
)); ?>
Trying to get property of non-object
/home/konst/framework/db/ar/CActiveRecord.php(616)
604 */
605 public function getActiveRelation($name)
606 {
607 return isset($this->getMetaData()->relations[$name]) ? $this->getMetaData()->relations[$name] : null;
608 }
609
610 /**
611 * Returns the metadata of the table that this AR belongs to
612 * @return CDbTableSchema the metadata of the table that this AR belongs to
613 */
614 public function getTableSchema()
615 {
616 return $this->getMetaData()->tableSchema;
617 }
618
619 /**
620 * Returns the command builder used by this AR.
621 * @return CDbCommandBuilder the command builder used by this AR
622 */
623 public function getCommandBuilder()
624 {
625 return $this->getDbConnection()->getSchema()->getCommandBuilder();
626 }
627
628 /**
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Кеширование CActiveDataProvider - возможно ли?
По идее кешируются данные. А dataProvider это связка кучи классов, и эти классы не подгружают в autoload.
Я кеширую
Я кеширую
Код: Выделить всё
if(($dataProvider=Yii::app()->cache->get("GoodsList{$id}"))===false)
{
$dataProvider = new CActiveDataProvider(Goods::model()->notdeleted($id), array(
'pagination'=>array(
'pageSize'=>11
)
));
Yii::app()->cache->set("GoodsList{$id}",
$dataProvider->getData(),
$this->module->cacheDuration,
DBDependency::GetTbDependency(Goods::model()->tableName())
);
}
else
$dataProvider=new CArrayProvider($dataProvider);
Жду Yii 3!
Re: Кеширование CActiveDataProvider - возможно ли?
Да, как раз хотел написать, что дело не в самом dataProvider, а в том, что он за собой тянет.
Здесь надо кешировать "Goods::model()->notdeleted($id)", а не весь dataProvider
Здесь надо кешировать "Goods::model()->notdeleted($id)", а не весь dataProvider
Re: Кеширование CActiveDataProvider - возможно ли?
to mc-bear
не совсем понял ваш код
to Nafania
да, согласен что можно кешировать данные, только не совсем понятно на каком этапе?
Goods::model()->notdeleted($id) у нас тут не идет выборка, а выборка findAll идет в самом CActiveDataProvider
не совсем понял ваш код
to Nafania
да, согласен что можно кешировать данные, только не совсем понятно на каком этапе?
Goods::model()->notdeleted($id) у нас тут не идет выборка, а выборка findAll идет в самом CActiveDataProvider
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Кеширование CActiveDataProvider - возможно ли?
$dataProvideer->getData() возвращает массив данных (без объекта сортировки, погинации, только данные)zibert02 писал(а):to mc-bear
не совсем понял ваш код
кешируем их.
если есть массив данных в кеше то берем и из массива создаем провайдер это CArrayProvider
пс: это все не рабочий код а теоретический, мне самому актуален вопрос кеширования
Жду Yii 3!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Кеширование CActiveDataProvider - возможно ли?
ECacheableARDataProvider?
Нравится Yii? Давайте сделаем его лучше!.
Re: Кеширование CActiveDataProvider - возможно ли?
спасибо, все работает
p.s. ECacheableARDataProvider смотрел, но у меня задача проще, главное было разобраться что именно надо кешировать
p.s. ECacheableARDataProvider смотрел, но у меня задача проще, главное было разобраться что именно надо кешировать
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Кеширование CActiveDataProvider - возможно ли?
mc-bear, это предложение реализовать такую штуку
Нравится Yii? Давайте сделаем его лучше!.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Кеширование CActiveDataProvider - возможно ли?
mc-bear, мне тоже интересно
Нравится Yii? Давайте сделаем его лучше!.
Re: Кеширование CActiveDataProvider - возможно ли?
когда изучал вопрос по кешированию провайдера то наткнулся на какоето крутое расширение для кеширования , только вот не помню адресаmc-bear писал(а):А что тогда смотрел zibert02 ?
подумал что это оно и есть
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Кеширование CActiveDataProvider - возможно ли?
может вспомнишь, хотел бы посмотретьzibert02 писал(а):только вот не помню адреса
Жду Yii 3!