我使用Symfony 4和Doctrine,我想使用子查询进行复杂查询:
$status = [0, 1];
$subquery = $this->_em->createQueryBuilder()
->select('COUNT(item.id)')
->from('App\Entity\CalculItem', 'item')
->where('item.status IN (:status)')
->andWhere('item.file = c')
->setParameter('status', $status)
->getDQL();
$query = $this->createQueryBuilder('c')
->where('c.status = :status')
->setParameter('status', 1)
->andWhere('('. $subquery .') = 0')
->andWhere('c.stat_items > 0')
->setMaxResults(1)
->getQuery()
;
dump($query->getSQL());
return $query->getOneOrNullResult();
我没有错误,但是它给我返回结果,而我没有任何期望。如果我直接在phpmyadmin中使用->getSQL()
,则不会有任何结果。
我不明白为什么我使用“ Symfony / Doctrine方式”返回结果,而使用SQL查询却没有结果?
编辑
如果使用子查询,则只需要在“主”查询中绑定参数。由于您对子查询使用->getDQL()
,因此它不会约束参数。
就我而言,我在两个查询中都使用了(我的错误):status
参数。