You can use \yii\data\ActiveDataProvider with the yii\elasticsearch\Query and yii\elasticsearch\ActiveQuery:
use yii\data\ActiveDataProvider;
use yii\elasticsearch\Query;
$query = new Query();
$query->from('yiitest', 'user');
$provider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 10,
]
]);
$models = $provider->getModels();
use yii\data\ActiveDataProvider;
use app\models\User;
$provider = new ActiveDataProvider([
'query' => User::find(),
'pagination' => [
'pageSize' => 10,
]
]);
$models = $provider->getModels();
However, usage of \yii\data\ActiveDataProvider with enabled pagination is not efficient, since it require
performing unnecessary extra query for the total item count fetching. Also it will be unable to give you access
for the query aggregations results. You can use yii\elasticsearch\ActiveDataProvider
instead. It allows preparing
total item count using query 'meta' information and fetching of the aggregations results:
use yii\elasticsearch\ActiveDataProvider;
use yii\elasticsearch\Query;
$query = new Query();
$query->from('yiitest', 'user')
->addAggregation('foo', 'terms', []);
$provider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 10,
]
]);
$models = $provider->getModels();
$aggregations = $provider->getAggregations();
$fooAggregation = $provider->getAggregation('foo');