Doctrine orm 在原则QueryBuilder的where in子句中添加条件
我使用的是API平台,需要在某些条件下进行选择。我正在使用扩展来实现这一点,它通过一个条令\ORM\QueryBuilder传递 一般来说,这很好,但在本例中,我正在努力修改WHERE id INsub查询子句中的子查询 这是以字符串形式接收的查询注意,它是作为QueryBuilder对象传递的,而不是字符串: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
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中的查询已按所述给出,并且带有子查询。我可以做一个额外的连接,但是我更愿意改变原始的子查询来限制访问,而不是使用更多的资源。