Имеется страничка, на которой осуществляется поиск с помощью 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();
}