doctrine query builder Подзапрос (subquery) "SELECT * WHERE value IN (SELECT ...)"

SELECT column-names
FROM table-name1
WHERE value IN (SELECT column-name
       FROM table-name2 
        WHERE condition)

Такой подзапрос можно оформить с помощью QueryBuilder-а через expr()->in(). Например, так:

$qb = $this->createQueryBuilder('m');

$result = $qb->where(
    $qb ->expr()->in(
        'm.accountManager',
        $this->getEntityManager()
             ->createQueryBuilder()
             ->select('accountManager.id')
             ->from(WebbankirManager::class, 'accountManager')
             ->where('accountManager.id = :authUserId')
             ->getDQL()
        )
    )
    ->setParameter('authUserId', $authUserId)
    ->getQuery()
    ->getResult();

Здесь задействуются 2 связанные таблицы: manager ('m') и account_manager ('accountManager'). Связь "один-ко-многим": у одного аккаунт менеджера может быть много менеджеров.

В выборку попадают все менеджеры, аккаунт менеджер которых авторизован (accountManager.id = :authUserId). id авторизованного аккаунт-менеджера передаётся в качестве параметра.

Источники