Query Build доктрина Symfony - PullRequest
0 голосов
/ 24 мая 2019

У меня есть 2 объекта (Rule и analysisRule) (связь один ко многим)

Я пытаюсь сделать запрос, который подсчитывает число 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 дня

Ответы [ 2 ]

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

Это работает с внутренним соединением.В хранилище 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.

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

Согласно 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();

где $ analysis = 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();
...