【发布时间】:2019-08-02 08:25:13
【问题描述】:
在我的 Symfony 4 项目中,我有一个 User 实体和一个 UserRepository。
我正在尝试在QueryBuilder(Doctrine 2) 甚至在DQL 中实现这个SQL 查询的等效项。
SELECT * FROM user WHERE account_manager_id IN (SELECT id FROM user WHERE account_manager_id = :managerAdminId AND roles LIKE '%ROLE_MANAGER%')
或者可能使用不同的语法。
我尝试了不同的方法,但不知道如何使用子查询编写 WHERE ... IN。
这就是我能想到的,但我不喜欢它,因为它会触发多个查询,我可以用一个查询来做一些事情:
//App\Repository\UserRepository
public function getPublishersOfManagers($managerAdminId)
{
//SELECT * FROM user WHERE account_manager_id IN (SELECT id FROM user WHERE account_manager_id = :managerAdminId AND roles LIKE '%ROLE_MANAGER%')
$managerIds = $this->createQueryBuilder('u')
->select('u.id')
->where('u.roles LIKE :role')
->setParameter('role' , '%ROLE_MANAGER%')
->andWhere('u.accountManager = :managerAdminId')
->setParameter('managerAdminId' , $managerAdminId)
->getQuery()->getArrayResult();
$publishers = [];
foreach ($managerIds as $id) {
$publishers[] = $this->createQueryBuilder('u')
->select('u')
->where('u.roles LIKE :role')
->setParameter('role' , '%ROLE_PUBLISHER%')
->andWhere('u.accountManager = :managerAdminId')
->setParameter('managerAdminId' , $id)
->getQuery()->getResult();
}
return $publishers;
}
【问题讨论】:
标签: symfony doctrine-orm doctrine symfony4 dql