【问题标题】:Query Build doctrine Symfony查询构建学说 Symfony
【发布时间】:2019-05-24 13:22:58
【问题描述】:

我有 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天

【问题讨论】:

    标签: symfony doctrine query-builder


    【解决方案1】:

    这适用于内部连接。在 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 类的使用。

    【讨论】:

      【解决方案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();
      

      在你的情况下 $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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-30
        • 1970-01-01
        • 1970-01-01
        • 2011-09-11
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        • 2011-11-15
        相关资源
        最近更新 更多