Как сделать пагинацию получаемых данных со Sphinx?

Имеется страничка, на которой осуществляется поиск с помощью Sphinx

/**
     * @return string
     *
     *
     * страница отображения всех резюме
     */
    public function actionIndex()
    {

        $resume = new Resume();
        $model = new SearchForm();

        // подключаем пагинацию
        $pagination = new Pagination([
            'defaultPageSize' => 3,
            'totalCount' => $resume->count(),
            'forcePageParam' => false,
            'pageSizeParam' => false,
        ]);

        // по умолчанию - пока пользователь не воспользовался поиском
        // отображает последние резюме
        $resumes = $resume->getResumes($pagination->offset, $pagination->limit);


        // если пользователь воспользовался поиском
        if($model->load(Yii::$app->request->post())) {
            // получаем данные, но уже без пагинации
            $resumes = $model->searchAdvanced();
        }

        return $this->render('index', [
            'pagination' => $pagination,
            'model' => $model,
            'resumes' => $resumes,
        ]);
    }


Метод, который осуществляет все действия по поиску в БД
/**
     * @param $keyword string
     * @return array|\yii\db\ActiveRecord[]
     *
     */
    public function advancedSearch($keyword)
    {

        // sql запрос к Sphinx
        $sql = "SELECT * FROM resume_index WHERE MATCH(:keyword)";

        $params = [
          'keyword' => $keyword,
        ];

        // возвращает ключи записей в БД
        $dataId = Yii::$app->sphinx->createCommand($sql, $params)->queryAll();

        // модифицируем массив
        $resumesId = ArrayHelper::map($dataId, 'id', 'id');

        // находим записи в БД и возвращаем
        return $data = Resume::find()->where(['id' => $resumesId])->asArray()->all();
        
    }
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
В сфинксе есть лимит работает так же как в sql
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы