Доктрина Query Build Symfony

У меня есть 2 объекта (правило и правило анализа) (ассоциация один ко многим)

Я пытаюсь сделать запрос, который подсчитывает количество idAnalyseRule, которые имеют пропуск idAnalyse в качестве параметра в функции.

пример:

Я передаю idRule = 15 в качестве параметра, запрос будет считать все IdAnalysisRules, у которых idAnalysis = 15

Я не знаю, как это работает, но я пробую так

        $qb = $this->createQueryBuilder('p');
        $expr = $qb->expr();
        $qb->andWhere(
            $expr->eq('p.analyse', ':analyse')
        )
        ->setParameter('analyse', $analyse);
        return $qb->getQuery()->getSingleResult();

это менеджер

    /**
         * @param $analyse
         * @return mixed
         */
        public function errorsAnalyseRule(Analyse $analyse){

            return $this->repository->totalErrors($analyse);
        }

это контроллер

     /**
         *
         * Get a totalError by idAnalyse.
         * @param Analyse $analyse
         * @param AnalyseRuleManager $analyseRuleManager
         * @return ApiResponse
         *
         * @SWG\Parameter(name = "id", in = "path", type = "integer", description = "Supplier Id"))
         * @SWG\Response(response=200, description = "Returns the nbErrors")
         *
         * @Rest\Get("analyses/{id}", requirements = {"id" = "\d+"})
         */
        public function getTotalErrorsAction(Analyse $analyse, AnalyseRuleManager $analyseRuleManager)
        {
            return new ApiResponse(['nbErrors' => $analyseRuleManager->errorsAnalyseRule($analyse)]);
        }

Я в состоянии блокировки уже 3 дня

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Согласно https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html

Вы должны использовать:

$qb = $entityManager->createQueryBuilder();
$qb->select($qb->expr()->count('p.id'))
   ->from('App:AnalyseRule','p')
   ->where('p.analyse', ':analyse')
   ->setParameter('analyse', $analyse);
$count = $qb->getQuery()->getSingleScalarResult();

где $анализ = 15 в вашем случае!

Если вы младше 2.6, для доктрины предпочтительнее:

$qb = $entityManager->createQueryBuilder();
$qb->select('count(p.id)')
   ->from('App:AnalyseRule','p')
   ->where('p.analyse', ':analyse')
   ->setParameter('analyse', $analyse);
$count = $qb->getQuery()->getSingleScalarResult();
Ответ принят как подходящий

Это работает с внутренним соединением. В репозиторий analysisRule вам нужно добавить функцию, которая делает запрос и возвращает количество:

public function countAnalysisRule(Rule $rule)
{
    return $this-createQueryBuilder('a')
        ->select('count(a)')
        ->innerJoin('a.Rule', 'rule')
        ->where('rule.id = :rule')
        ->setParameter('rule', $rule->getId())
        ->getQuery()
        ->getSingleScalarResult();

}

Не забудьте, конечно, добавить использование класса Rule.

Другие вопросы по теме

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