Задать вопрос
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки

Как подключить sphinx в yii2 и работать с ним?

Подключаю sphinx, как компонент по этой инструкции: https://www.zagirov.name/yii-cookbook-2/ (ближе к концу по ссылке есть информация про sphinx)

В конфиге у меня следующее:
'sphinx' => [
            'class' => 'system.db.CDbConnection',
            'connectionString' => 'mysql:host=127.0.0.1;port=9306',
        ],


В контроллере для проверки пишу код:
$sSql = 'SELECT id FROM posts WHERE MATCH('.Yii::$app->sphinx->quoteValue($term).')';
$ids = Yii::$app->sphinx->createCommand($sSql)->queryAll();
var_dump($ids); die();


Вижу ошибку:
Class system.db.CDbConnection does not exist


Т.е. в yii2 этого класса нет? А какой тогда использовать?
Или есть иные способы работать с sphinx в yii2? Какие?
  • Вопрос задан
  • 6913 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
AloneCoder
@AloneCoder
[object Object]
Нет, это примеры для первой версии фреймворка
Для yii2 есть https://github.com/yiisoft/yii2-sphinx
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mulat
@mulat
seo, php, yii2
Пару примеров моего кода для Yii2
из виджета RelatedPosts:

/**
  * $inCategory
  * @var boolean  false - get posts from alien categories, true - from this category
  */

$postIds = $query
      ->select('id')
      ->from(Yii::$app->getModule('blog')->getParam('sphinxRtIndex'))
      ->match(new Expression(':match',
          [
              'match' => implode(' | ', $search)
          ]
      ))
      ->andWhere('id != :id', [':id' => $this->postModel->id])
      ->andWhere('category_id' . ($this->inCategory? '=' : '!=') . ':category_id', 
             [
                 ':category_id' => $this->postModel->category_id
             ]
      )
      ->limit($this->limit)
      ->all();


из поведения RtSphinxBehavior (на github):

protected function replace() {
    $params = [];

    $sql = \Yii::$app->sphinx->getQueryBuilder()
        ->replace(
            $this->rtIndex,
            $this->getColumns(),
            $params
        );
    return \Yii::$app->sphinx->createCommand($sql, $params)->execute();
}
/**
  * $this->getColumns()  возвращает массив вида:
  * ['title' => 'John Doe', 'text' => 'I knew John well...']
  *
  * $this->rtIndex - содержит значение имени Realtime индекса
 */
Ответ написан
Комментировать
Комментировать
Ваш ответ на вопрос

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

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