Doctrine orm 在原则QueryBuilder的where in子句中添加条件

Doctrine orm 在原则QueryBuilder的where in子句中添加条件,doctrine-orm,api-platform.com,where-in,Doctrine Orm,Api Platform.com,Where In,我使用的是API平台,需要在某些条件下进行选择。我正在使用扩展来实现这一点,它通过一个条令\ORM\QueryBuilder传递 一般来说,这很好,但在本例中,我正在努力修改WHERE id INsub查询子句中的子查询 这是以字符串形式接收的查询注意,它是作为QueryBuilder对象传递的,而不是字符串: SELECT o FROM App\\Entity\\Employee o WHERE o.organization IN( SELECT id_a1 FROM A

我使用的是API平台,需要在某些条件下进行选择。我正在使用扩展来实现这一点,它通过一个条令\ORM\QueryBuilder传递

一般来说,这很好,但在本例中,我正在努力修改WHERE id INsub查询子句中的子查询

这是以字符串形式接收的查询注意,它是作为QueryBuilder对象传递的,而不是字符串:

SELECT o 
FROM App\\Entity\\Employee o 
WHERE o.organization IN(
    SELECT id_a1 
    FROM App\\Entity\\Organization id_a1 
    WHERE id_a1.id = :id_p1
)
我需要添加到子查询的是where子句的另一个条件,因此它将变成:

...
IN(
    SELECT id_a1 
    FROM App\\Entity\\Organization id_a1 
    WHERE id_a1.id = :id_p1 AND id_a1.owner = :owner
)
我需要帮助,以解决如何获得接收只是子查询和修改这个对象。我假设它是一个QueryBuilder或其他一些存在于原始QueryBuilder对象中的对象

编辑: 这是我做的一个破解,但很容易破解

$query=$this->getQueryBuilder; $where=$query->getDQLPart'where'; $query->resetDQLPartwhere; $squery=$this->getQueryBuilder ->getEntityManager ->createQueryBuilder; $param=$query->getParameters[0]; $squery->selectorg ->来自\App\Entity\Organization::类,组织 ->whereorg.owner=:owner ->其中sprintforg.id=:%s,$param->getName; $field=sprintf%s.organization,$query->getRootAlias; foreach$where->getParts as$key=>$value{ 如果strpos$value->getName$field!==false{ $query->where $query->expr->in $field, $squery->getDQL ; $query->setParameter:owner,$this->security->getUser; } }
我可能错过了一些上下文,完全错了,但是你不能用join解决这个问题吗?嗨,谢谢你的建议。问题是QueryBuilder中的查询已按所述给出,并且带有子查询。我可以做一个额外的连接,但是我更愿意改变原始的子查询来限制访问,而不是使用更多的资源。