Смотрите. Есть обычный ActiveDataProvider который работает с Query реляционной базы данных. DataProvider автоматически добавляет к Query limit и offset параметры. Для фильтрации данных нужно использовать Sphinx, который возвращает id найденных записей. Limit и offset нужно применять к запросу Sphinx, а не к Query. А сами данные из бд извлекать по id.
$ids = [1,2,4,768,8797]; // полученные id от сфинкса или еще откуда либо
$dataProvider = new ActiveDataProvider([
'query'=>SomeModel::find()->andWhere(['id'=>$ids]),
]);
echo \yii\grid\GridView::widget([
'dataProvider' => $dataProvider,
]);
Это самый первый вариант, который пришел в голову. Но тут не будет работать пагинация. Есть идеи допилить этот вариант, но получается костыль. Хотелось бы все сделать красиво, в рамках фреймворка.
Степан Романов: Создайте свой dataProvider, унаследуйте от ActiveDataProvider и переопределите в нем метод с пагинацией и вообще пусть сам делает запросы к сфинкс. Мне кажется у Вас там что-то не совсем так как надо, но не видя кода, сложно сказать. Я не понимаю зачем получать айдишники, что бы потом делать запросы. Как то странно все у Вас.
Можно использовать yii\data\ArrayDataProvider или yii\data\SqlDataProvider
1. Есть таблица в MySQL
2. Есть индекс для этой таблицы в Sphinx.
3. Нужно отобразить отфильтрованные с помощью (2) данные из (1) в GridView.
4. Для GridView нужен DataProvider над (1).
По факту же дата провайдер должен быть над (2), но получать id, делать доп запрос к (1) и выводить данные из (1).