Yii1 - 防止分页(dataProvider)计数,或缓存它

Yii1 - prevent pagination (dataProvider) from counting, or cache it

是否可以防止在数据提供程序中进行计数,或者至少缓存结果?

这是我当前的代码,每次调用都会进行计数:

$dataProvider = new CActiveDataProvider(PProjectJob::model()->cache(3600, null, 2), array(
            'criteria' => $searchForm->search(),
            'pagination' => array(
                'pageSize' => Yii::app()->user->getState('pageSize', Yii::app()->params['defaultPageSize']),
            ),
            'sort' => RedeliverySearchForm::getSort(),
            'totalItemCount' => null
        ));

初始查询总是一样的,缓存一个计数结果24小时对性能影响很大。

您可以将 'totalItemCount' 值传递给 CActiveDataProvider 构造函数,您在当前代码中将其作为 null 传入

如果 'totalItemCount'null

,数据提供者只会 运行 计数查询

您可以愉快地根据 $searchForm->search() 条件自行计算或从缓存中获取计数结果,并将其传递给

第二个选项是创建您自己的 CActiveDataProvider 扩展,覆盖 calculateTotalItemCount(),并为当前 运行 查询 count() 的计数结果提供缓存选项