Cache I Paginacja

Witajcie,

aktualnie jestem w trakcie realizacji dosyć dużego projektu w którym wykorzystuję Cache na porządku dziennym z uwagi na dużą ilość zapytań i danych. Powstaje pytanie w jaki sposób utowrzyć paginacje w Yii przy użyciu CdbCache

Może podam przykład jak akutalnie wygląda przykładowa akcja controllera:




	public function actionIndex()

	{


		$streams_cached = Yii::app()->cache->get('streams');

		if($streams_cached === false) {

			$streams = PsStreamsMainModel::model()->findAll();


			if($streams !== null) {

		

				foreach($streams as $stream) {

					$list_stream[] = $stream['channel_name']; 

				}

				

				$curl = Yii::app()->curl->get('//api.*****/kraken/streams?channel='.strtolower(implode(',', $list_stream)), array());

				$array_with_streams = json_decode($curl, true);

			}


			//cache it

			Yii::app()->cache->set('streams', $array_with_streams, 300);								

		}


        $streams_cached = Yii::app()->cache->get('streams');

		$this->render('index', array('streams' => $streams_cached));

	}



Może krótki opis zmiennych:


$streams_cached

zwraca tablicę array z danymi (w środku po kilka rekordów oznaczonych kolejno array[1], array[2]).

W jaki sposób utworzyć teraz paginacje idąc zgodnie z ideą CPagination:


    $criteria=new CDbCriteria();

    $count=Article::model()->count($criteria);

    $pages=new CPagination($count);


    // results per page

    $pages->pageSize=10;

    $pages->applyLimit($criteria);

    $models=Article::model()->findAll($criteria);


    $this->render('index', array(

    'models' => $models,

         'pages' => $pages

    ));

Proszę o pomoc, ponieważ już nieźle się nagłowiłem jak to połączyć z cache-em

Pozdrawiam

Wystarczy, że stworzysz metode w modelu odpowiedzialna za wczytanie danych zamiast korzystać z findAll. Możesz też http://www.yiiframework.com/doc/api/1.1/CActiveRecord/#beforeFind-detail użyć metody before do sprawdzenia cache przed wczytaniem.