V
V
Vladislav2018-11-20 15:46:06
Sphinx
Vladislav, 2018-11-20 15:46:06

How to make pagination of received data with Sphinx?

There is a page that is being searched using 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,
        ]);
    }

The method that performs all the actions to search the database
/**
     * @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();
        
    }

Answer the question

In order to leave comments, you need to log in

1 answer(s)
P
Puma Thailand, 2018-11-20
@opium

There is a limit in sphinx that works just like in sql

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question