Symfony Form Query Builder - PullRequest
       11

Symfony Form Query Builder

0 голосов
/ 08 мая 2019

У меня проблема с конструктором запросов, но я не знаю, как исправить эту ошибку. Можете ли вы мне помочь?

Итак, вот моя проблема, я хочу получить список вопросов, которых нет в моей анкете и которые имеют ту же тему, что и моя анкета.

Вот мой код:

    $builder
        ->add('orderQuestion')
        ->add('idQuestion', EntityType::class, [
            'class' => Question::class,
            'query_builder' => function(EntityRepository $er) use ($idTheme, $idQuestionnaire){
                $resultatQuestion = $er->createQueryBuilder('questionn')
                    ->select('questionn.id')
                    ->innerJoin('App\Entity\SurveyQuestion', 'surveyQuestion', 'WITH', 'questionn.id = surveyQuestion.idQuestion')
                    ->where('surveyQuestion.idSurvey = :idSurvey')
                ;

                $resultat = $er->createQueryBuilder('q')
                    ->leftJoin('q.surveyQuestions', 'sQ')
                    ->leftJoin('sQ.idSurvey', 's')
                    ->where('q.idTheme = :idTheme')->setParameter('idTheme', $idTheme)->setParameter(':idSurvey', $idQuestionnaire)
                    ->andWhere($er->createQueryBuilder('question')->expr()->notIn('q.id', $resultatQuestion->getDQL()))
                    ;

                return $resultat;
            },
            'choice_label' => function ($question) {
                return $question->getLabel();
            },
        ])
    ;

Но с этим кодом может возникнуть ошибка: «Предупреждение: get_class () ожидает, что параметр 1 будет объектом, задан массив».

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

не могли бы вы изменить свой код

$resultat = $er->createQueryBuilder('q')
                    ->leftJoin('q.surveyQuestions', 'sQ')
                    ->leftJoin('sQ.idSurvey', 's')
                    ->where('q.idTheme = :val')
                    ->andWhere('q.id NOT IN ' . $test)
                    ->setParameter('val', $idTheme)
                    ->getQuery()
                    ->getResult()
                    ;
0 голосов
/ 08 мая 2019

Итак, чтобы быть ясным, как я упоминал в комментарии и в документации Symfony - 'query_builder', это может быть либо QueryBuilder объект, вызываемый или null.

Таким образом, вам нужно удалить ->getQuery() и ->getResult() из вашего второго запроса.

Обновление

Итак, спасибо за разъяснения из @msg в комментариях.И в соответствии с этим вам также нужно удалить из первого оператора ->getQuery() и ->getResult() тоже и просто добавить туда ->getDQL()

И это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...