Как сделать поиск внутри группы вопросов?

Добрый день, столкнулся с задачей.
Есть страничка FAQ, в ней на данный момент есть 6 групп в каждой группе по 6 вопрос/ответ.
Хочу сделать такую вещь, обычно поиск происходит сразу по тому что выбирается из базы.
Приведу скрин
5b0e6bf998a1e808664862.png
Как реализовать поиск не по названию и описанию группы, а сделать поиск по вопросам которые находятся Внутри группы.

Попробовал сделать так, но пока что идей мало:(
Сделать привязку и по ней попробовать найти. Но как сделать это все более грамотно?
public function actionFaq()
    {
        $searchQuestion = Yii::$app->request->get('searchQuestion');
        $faq = (new Query())
			->from(Questions::tableName()." question");
        if(!empty($searchQuestion)) {
            $faq->leftJoin(AnswerForQuestion::tableName()." searchAnswer")
				->andWhere([
                'or',
                ['like','searchAnswer.question',$searchQuestion],
            ]);
        }
        return $this->render('faq',[
            'faq' => $faq->all()
        ]);
    }
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
Jhon_Light
@Jhon_Light Автор вопроса
Вот решение, пришел к такому выводу
public function actionFaq()
	{
		$searchQuestion = Yii::$app->request->get('searchQuestion');
		$faq = (new Query())
			->from(Questions::tableName()." quest");
		if(!empty($searchQuestion)) {
			$faq->leftJoin(AnswerForQuestion::tableName()." ans_for_que",'ans_for_que.id_question = quest.id')
				->select('ans_for_que.id_question as id_question, quest.title, quest.decsription')
				->groupBy(['id_question','quest.id'])
				->andWhere([
							   'or',
							   ['like','ans_for_que.question',$searchQuestion],
						   ]);
		}

		return $this->render('faq',[
			'faq' => $faq->all()
		]);
	}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Не вижу разницы. Стандартная ситуация, есть таблица Вы в ней ищите совпадения. В чем конкретно проблема?

Попробовал сделать так, но пока что идей мало:(

Сделали и что? Работает не так как хотелось, ошибки есть? Какие?

Зачем join вообще? У Вас есть таблица в ней лежат вопросы и ответы всех групп, сколько бы их ни было. Поиск при этом одной строкой делается:
$q = 'some query string';
$data = MyModelForQuestion::find()
                    ->orWhere(['like','question',$q])
                    ->orWhere(['like','answer',$q])
                    ->index('group_id')
                    ->all();

Это конечно примитивное решение, поиск должен учитывать опечатки и разбивать строки на слова, и часто такой точности не требуется. Так что это пример.
и кстати Ваш код:
->andWhere([ 'or', ['like','searchAnswer.question',$searchQuestion],]);

должен давать ошибку, пропущен третий параметр
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы