Yii1 - запретить подсчет страниц (dataProvider) или кэшировать его - PullRequest
0 голосов
/ 16 января 2019

Можно ли предотвратить подсчет в поставщике данных или хотя бы кэшировать результат?

Это мой текущий код, и подсчет производится для каждого звонка:

$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 часов окажет большое влияние на производительность.

1 Ответ

0 голосов
/ 17 января 2019

Вы можете передать значение 'totalItemCount' в конструктор CActiveDataProvider , который вы передали как null в вашем текущем коде

Поставщик данных будет выполнять запрос подсчета, только если его 'totalItemCount' равно null

Вы можете с удовольствием вычислить или получить из кеша результат подсчета самостоятельно, основываясь на критериях $searchForm->search(), и передать его в

Второй вариант - создать собственное расширение CActiveDataProvider, переопределить calculateTotalItemCount() и предоставить параметр кэширования для результата подсчета, в котором в данный момент выполняется запрос count()

...