It allows to fetch not only rows and total rows count, but also a meta information and facet results. The following is an example of using ActiveDataProvider to provide facet results: php $provider = new ActiveDataProvider([ 'query' => Post::find()->facets(['author_id', 'category_id']), 'pagination' => [ 'pageSize' => 20, ], ]); get the posts in the current page $posts = $provider->getModels(); get all facets $facets = $provider->getFacets(); get particular facet $authorFacet = $provider->getFacet('author_id'); In case [[Query::showMeta]] is set ActiveDataProvider will fetch total count value from the query meta information, avoiding extra counting query: php $provider = new ActiveDataProvider([ 'query' => Post::find()->showMeta(true), 'pagination' => [ 'pageSize' => 20, ], ]); $totalCount = $provider->getTotalCount(); // fetched from meta information Note: when using 'meta' information results total count will be fetched after pagination limit applying, which eliminates ability to verify if requested page number actually exist. Data provider disables yii\data\Pagination::validatePage automatically in this case. Note: because pagination offset and limit may exceed Sphinx 'max_matches' bounds, data provider will set 'max_matches' option automatically based on those values. However, if [[Query::showMeta]] is set, such adjustment is not performed as it will break total count calculation, so you'll have to deal with 'max_matches' bounds on your own.
Since: 2.0.4
Author: Paul Klimov (klimov.paul@gmail.com)
Inheritance: extends yii\data\ActiveDataProvider
コード例 #1
0
 public function actionQuery($query, $page = 1, $pageSize = 100)
 {
     Yii::$app->response->format = Response::FORMAT_JSON;
     $provider = new ActiveDataProvider(['query' => Torrent::find()->match($query)]);
     $pagination = $provider->pagination;
     $pagination->page = $page;
     $pagination->pageSize = $pageSize;
     $models = $provider->getModels();
     return ['data' => $models, 'pagination' => ['page' => $pagination->page, 'pageSize' => $pagination->pageSize, 'pageCount' => $pagination->pageCount, 'totalCount' => $pagination->totalCount]];
 }