Получение синтаксической ошибки на Doctrine CreateQueryBuilder с несколькими SELECT - PullRequest
0 голосов
/ 02 декабря 2019

У меня есть этот запрос ниже, который возвращает все, как ожидалось. Тем не менее, при запуске я получаю синтаксическую ошибку доктрины, но не могу определить ее. Есть ли особый способ добавить несколько вариантов выбора в Doctrine?

Это моя функция.

public function summaryReport()
{
    $qb = $this->createQueryBuilder('ds')
        ->select('ds.d_id, ds.d_name,
                        SUM(ds.c_email IS NOT NULL) * 100.00 / COUNT(c_number) AS percentage,
                        COUNT(DISTINCT ds.c_number) AS Qualifying_customers,
                        sum(ds.c_email IS not NULL) AS Qualifying_Customers_with_Email')
        ->groupBy('ds.d_id, ds.d_name')
        ->getQuery();
    dd($qb->getDQL());
    return $qb->getResult();
}

Я получаю сообщение об ошибке:

 Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got 'IS'

будет addSelect отдельноих?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2019

Это был запрос, который прошел

public function summaryReport()
{
    $qb = $this->createQueryBuilder('ds')
        ->select('ds.d_id, ds.d_name,
                        (sum(case  when  ds.c_email IS null then 0 else 1 end))*100/count(ds.c_number) as percentage')
        ->addSelect('COUNT(DISTINCT ds.c_number) AS qualifying')
        ->addSelect('sum(case when ds.c_email IS NULL then 0 else 1 end) AS qualifyingEmail')
        ->groupBy('ds.d_id, ds.d_name')
        ->getQuery();

    return $qb->getResult();
}
0 голосов
/ 02 декабря 2019

SUM(ds.c_email IS NOT NULL) здесь не правильно. Функция SUM определяется как "SUM" "(" ["DISTINCT"] StringPrimary ")", условие здесь не принимается.

Если вы хотите, чтобы условие NOT NULL возвращало 1 или 0, вам необходимо использовать функцию IF. Пример: SUM(IF(ds.c_email IS NOT NULL, 1, 0))

...