gpt4 book ai didi

php - 如何用 Doctrine 在 Symfony2 中实现子查询?

转载 作者:行者123 更新时间:2023-12-01 20:16:00 26 4
gpt4 key购买 nike

我需要计算子查询中返回的项目数。如果我如何编写 DQL 子查询 - 一切都很好,但如果我尝试通过 QueryBuilder 构建查询 - 我会收到错误。

子查询 DQL:

$qb3 = $this->createQueryBuilder('c')
->select('COUNT(c.id)')
->where('c.id IN (SELECT cl.id FROM Acme\AppBundle\Entity\ClassC cl INNER JOIN Acme\AppBundle\Entity\ClassP p WHERE p.var1 = :var1 AND p.var2 = cl.id GROUP BY cl.id)')
->setParameter('var1', $var);

通过 QueryBuilder 进行子查询:

$qb = $this->createQueryBuilder('c');
$qb->select('COUNT(c.id)')
->where(
$qb->expr()->in(
'c.id',
$this->createQueryBuilder('cl')
->select('cl.id')
->innerJoin('Acme\AppBundle\Entity\ClassP', 'p')
->where('p.var1 = :var1')
->setParameter('var1', $var)
->andWhere('p.var2 = cl.id')
->groupBy('cl.id')
->getDQL()
)
);

两个版本返回相同的 DQL。

错误: screen

最佳答案

尝试将setParameter()移动到查询的主级别。

$qb = $this->createQueryBuilder('c');
$qb->select('COUNT(c.id)')
->where(
$qb->expr()->in(
'c.id',
$this->createQueryBuilder('cl')
->select('cl.id')
->innerJoin('Acme\AppBundle\Entity\ClassP', 'p')
->where('p.var1 = :var1')
->andWhere('p.var2 = cl.id')
->groupBy('cl.id')
->getDQL()
)
)
->setParameter('var1', $var);

关于php - 如何用 Doctrine 在 Symfony2 中实现子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35601035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com