Как отфильтровать построитель запросов с другим запросом? - PullRequest
2 голосов
/ 07 февраля 2020

Я пытаюсь сделать следующий запрос к БД, чтобы получить следующие результаты:
Ожидаемые результаты

У меня есть таблица Области, но я хочу отсортировать результаты по словам ответственного, это означает, что ответственные лица с большим количеством областей вверху и ответственные лица с меньшим количеством областей внизу.
На самом деле я делаю это с помощью следующего Mysql запроса, который прекрасно работает:

SELECT    a.id_Area,
          a.name,
          a.responsible 
FROM      FSA_Areas a 
WHERE     enabled=TRUE 
AND       id_Plant = 1
ORDER BY (SELECT COUNT(*) 
          FROM   FSA_Areas a1 
          WHERE  a1.Responsible = a.Responsible 
          AND    a1.id_Plant = a.id_Plant 
          AND    Enabled='1') DESC, 
          a.responsible;

Но теперь я хочу сделать это в Doctrine Query Builder или DQL
Я пробовал это, это не сработало:

 $query = $em->createQueryBuilder()
        ->select('u')
        ->from('FSABundle:FSAArea','u')
        ->orderBy($this->createQueryBuilder('u1')
                    ->select('count(u1)')
                    ->from('FSABundle:FSAArea', 'u1')
                    ->where('u1.responsible = u.responsible')
                    ->andWhere('u1.plant = u.plant')
                    ->andWhere('u1.enabled = enabled')
        ,'DESC')
        ->getQuery()->getResult();
    return $query;


Любая идея о том же Mysql Запрос в DQL или Query Builder?

ТЕСТ 1:

 $sub = $em->createQueryBuilder('a')
        ->select('COUNT(a.id)')
        ->from('FSABundle:FSAArea','a')
        ->where('a.responsible = u.responsible')
        ->andWhere('a.plant = u.plant')
        ->andWhere('a.enabled = :status')
        ->setParameter('status','true');

    $qb->select('u')
        ->from('FSABundle:FSAArea','u')
        ->where('u.enabled = :status')
        ->andWhere('u.plant = :idPlant')
        ->setParameter('status','enabled')
        ->setParameter('idPlant','1')
        ->orderBy($sub->getDQL(),'DESC');

    return $qb->getQuery()->getResult();
...