【问题标题】:Convert query build to native SQL with union使用联合将查询构建转换为本机 SQL
【发布时间】:2019-05-27 10:20:42
【问题描述】:

我使用查询构建原则进行了两次计数查询,但是在我发现有几个重复的查询计数之后,我必须使用 UNION 但在原则查询构建中没有联合。

所以解决方案是使用带有 UNION 的原生 SQL。

我不知道如何在原生查询中进行翻译

这是我的要求 1

/**
     * @param Analyse $analyse
     * @return mixed
     * @throws \Doctrine\ORM\NonUniqueResultException
     */
    public function countTotalErrorByIdAnalyse(Analyse $analyse)
    {
        return $this->createQueryBuilder('a')
                    ->select('count(a)')
                    ->innerJoin('a.analyse', 'analyse')
                    ->where('analyse.id = :analyse')
                    ->setParameter('analyse', $analyse->getId())
                    ->getQuery()
                    ->getSingleScalarResult();

       
    }

这是我的要求 2

 /**
     * @param Analyse $analyse
     * @param string $severity
     * @return mixed
     * @throws \Doctrine\ORM\NonUniqueResultException
     */
    public function countErrorsBySeverity(Analyse $analyse, string $severity){

      return   $this->createQueryBuilder('a')
                    ->select('count(a)')
                    ->innerJoin('a.analyse', 'analyse')
                    ->innerJoin('a.rule', 'rule')
                    ->where('rule.severity = :error')
                    ->setParameter('error', $severity)
                    ->getQuery()
                    ->getSingleScalarResult();

    }

【问题讨论】:

    标签: symfony doctrine query-builder native-sql


    【解决方案1】:

    我强烈建议尝试在 Doctrine 中解决您的查询,但如果本地是唯一的方法,那么它就是唯一的方法。

    Symfony 中的原生 SQL:注意我在 Symfony 3 中使用了这些,但在 Symfony 4 中应该可以使用。一旦你更多地使用 Doctrine,你会发现它确实可以完成原生可以做的所有事情,而有些项目它不能做有可用的插件扩展教义的能力。此外,绕过联合的一种方法是运行两个查询,然后合并数组。

    $em = $this->getDoctrine()->getManager();
    $sql = "SELECT .. FROM .. WHERE .. ";
    $result = $em->getConnection()->prepare($sql);
    $result->execute();
    

    另一种选择是使用存储库:注意这使用了 Doctrine,因此所有 Doctrine 规则都适用。

        $sql =
            "
            SELECT
                ...
            FROM
                App:EntityName alias
            WHERE
                ...
            "
        ;
        $query = $this->getEntityManager()->createQuery($sql);
        $results = $query->getResult();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 2020-10-19
      • 2021-08-19
      • 2021-10-02
      相关资源
      最近更新 更多