查询构建学说 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 的使用。
我有 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 的使用。