Yii Как кэшировать в CActiveDataProvider
Я хочу кэшировать результаты БД для экземпляра CActiveDataProvider.
что нет кешей CActiveDataProvider? или все работает нормально?
Я подготавливаю провайдера данных в действии контроллера, а затем я использую провайдера данных в CGridView, позже в некотором представлении.
это мой код:
$criteria = new CDbCriteria;
$criteria->with = array('person', 'department', 'position', 'policy');
$criteria->condition='t.companyID=:companyID AND t.state = :state';
$criteria->params = array(':companyID'=>$companyID, ':state'=>VersionedActiveRecordState::ACTIVE);
$dataProvider = new CActiveDataProvider( Employee::model()->cache(2000,null), array(
'criteria' => $criteria,
'totalItemCount'=>200,
'sort' => array(
'defaultOrder' => 'person.lastName ASC, person.firstName ASC, person.patronymic ASC',
'attributes' => array(
'ID',
'code',
'grade',
'employeeFullName' => array(
'asc' => 'person.lastName ASC, person.firstName ASC, person.patronymic ASC',
'desc' => 'person.lastName DESC, person.firstName DESC, person.patronymic DESC',
),
'departmentTitle' => array(
'asc' => 'department.title ASC',
'desc' => 'department.title DESC',
),
'positionTitle' => array(
'asc' => 'position.title ASC',
'desc' => 'position.title DESC',
),
'scheduleTitle' => array(
'asc' => 'schedule.title ASC',
'desc' => 'schedule.title DESC',
),
'policyTitle' => array(
'asc' => 'policy.title ASC',
'desc' => 'policy.title DESC',
),
),
),
'pagination' => array(
'pageSize'=> Yii::app()->user->getState('employee_pageSize',Yii::app()->params['defaultPageSize']),
)
));
но безрезультатно: запрос не кэшируется.
1 ответ
Если вы используете нумерацию страниц, вам нужно увеличить свойство cacheCount до 2, первый запрос предназначен для подсчета (используется для разбиения на страницы), а второй - для выборки данных.
Измените свой код на:
$dataProvider = new CActiveDataProvider( Employee::model()->cache(2000,null,2)