查询构建学说 Symfony

Query Build doctrine Symfony

我有 2 个实体(规则和分析规则)(一对多关联)

我尝试进行一个查询,计算将 idAnalyse 作为参数传递给函数的 idAnalyseRule 的数量

示例:

我将 idRule = 15 作为参数传递,查询将计算所有具有 idAnalysis = 15 的 IdAnalysisRules

我不知道它是如何工作的,但我就是这样尝试的

        $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天

根据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();

在你的情况下 $analyse = 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 的存储库中,您必须添加进行查询的函数和 returns 计数:

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();

}

当然不要忘记添加对规则 class 的使用。