doctrine query builder Подзапрос (subquery) "SELECT * WHERE value IN (SELECT ...)"
Primary tabs
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 авторизованного аккаунт-менеджера передаётся в качестве параметра.
Источники
- https://stackoverflow.com/questions/11924164/subquery-in-doctrine2-notin-function
- https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html
- https://gist.github.com/roukmoute/d8b7473da78fc9d8b867
- Log in to post comments
- 4942 reads